以前、Spring Bootがお手軽ということで試してみたんだけど
Spring Tool Suite(以下「STS」)を導入することでさらにお手軽らしい・・・ので試してみる。
さらにデータ永続化には Spring Data JPA を使用し、DBを介してデータを取得してみた。
まずはSTSの導入。
Eclipseのヘルプ→Eclipseマーケットプレースを開き、「STS」で検索・インストール。
さっそくプロジェクトの作成。
ファイル→新規→その他をクリックすると「Spring スターター・プロジェクト」があるので選択。
ここは適当に入力。
サンプルプロジェクト作成のための画面となる。
今回はWebアプリ+データ永続化にはJPA+データベースにpostgresを使用するので以下をチェックした。
こんな感じでプロジェクトが作成された。いたれりつくせり、、
pom.xmlはこんな感じ。チェックしたものが網羅されているのが確認できる。
ここでデータベースを準備。個人では使ったことがなかったのでpostgresにしてみる。
ここからダウンロード、インストール。(全てなすがままに。)
そしてデータを準備。
何かいいものはないかと探した結果、LOTO6の出目表を使うことに。
(役に立つ日がくるんだろーか、、、)
postgresのGUIツールであるpgAdminを起動し、新規データベース「loto」を作成 & 新規テーブル「loto6」を作成した。
CREATE TABLE loto6 ( execCount integer NOT NULL, execDate date, num1 smallint, num2 smallint, num3 smallint, num4 smallint, num5 smallint, num6 smallint, BonusNum smallint );
GUIで見るとこんな感じに。
データを入れる。
insert into loto6 values(1, to_date('20001005', 'YYYYMMDD'), 2, 8, 10, 13, 27, 30, 39); insert into loto6 values(2, to_date('20001012', 'YYYYMMDD'), 1, 9, 16, 20, 21, 43, 5); insert into loto6 values(3, to_date('20001019', 'YYYYMMDD'), 1, 5, 15, 31, 36, 38, 13); insert into loto6 values(4, to_date('20001026', 'YYYYMMDD'), 16, 18, 26, 27, 34, 40, 13); insert into loto6 values(5, to_date('20001102', 'YYYYMMDD'), 9, 15, 21, 23, 27, 28, 43); insert into loto6 values(6, to_date('20001109', 'YYYYMMDD'), 6, 12, 23, 25, 28, 38, 22); insert into loto6 values(7, to_date('20001116', 'YYYYMMDD'), 7, 19, 21, 23, 33, 35, 26); insert into loto6 values(8, to_date('20001123', 'YYYYMMDD'), 11, 16, 18, 20, 42, 43, 28); insert into loto6 values(9, to_date('20001130', 'YYYYMMDD'), 11, 19, 23, 38, 39, 42, 15); insert into loto6 values(10, to_date('20001207', 'YYYYMMDD'), 1, 3, 19, 21, 35, 39, 26); -- 以下省略。
DBが準備できたので、Eclipseへ戻る。
まず、src/main/resources配下にあるapplication.propertiesへデータベース接続情報を追記。
まぁ最初は空ファイルなので以下が全て。
spring.datasource.url=jdbc:postgresql://localhost:5432/loto spring.datasource.username=postgres spring.datasource.password=hogechabin spring.datasource.driverClassName=org.postgresql.Driver
マッピングのためのEntityクラスを追加する。
メインのアプリケーションクラスが「com.egg1st」パッケージなので、「com.egg1st.entity」パッケージを作成。配下に「Loto6.java」クラスを作成。
@Entity(name="loto6") // Entityクラスであることを明記。name属性はテーブル名で。 public class Loto6 { @Id private int execcount; private Date execdate; private int num1; private int num2; private int num3; private int num4; private int num5; private int num6; private int bonusnum; // setter, getterは省略。 }
データアクセスを担うリポジトリクラスを作成する。
「com.egg1st.repository」パッケージを作成。配下に「ILoto6NumbersRepository.java」インターフェースを作成。
@Repository // Repository クラスであることを明記。 public interface ILoto6NumbersRepository extends JpaRepository<Loto6, Integer> { // JpaRepositoryが持つメソッドを用いるので、自前メソッドはなしで。 }
せっかくなのでサービスクラスを介すようにする。
「com.egg1st.service」パッケージを作成。配下に「Iloto6ShowService.java」インターフェースを作成。
public interface Iloto6ShowService { public List<Loto6> getAll(); }
「com.egg1st.service」パッケージ配下に、「Iloto6ShowService.java」の実装クラスを作成。
@Service // Service実装クラスであることを明記。 public class Loto6ShowServiceImpl implements Iloto6ShowService { @Autowired // DI(依存性の注入) ILoto6NumbersRepository repository; @Override // オーバーライド public List<Loto6> getAll() { return repository.findAll(); } }
プロジェクトツリーはこんな感じに。
あとはサービス呼ぶだけ・・・のはず。
アプリケーションクラスにコントローラーを担ってもらう。(一般的には分けるべきなのかな?)
@SpringBootApplication @RestController // Controllerクラスであることを明記。jsonを扱うのでRestControllerに。 @EnableAutoConfiguration public class SpringbootjpaApplication { @Autowired Iloto6ShowService loto6ShowService; @RequestMapping("/") // リクエストURLとのマッピング List<Loto6> getAll(Model model){ return loto6ShowService.getAll(); } public static void main(String[] args) { SpringApplication.run(SpringbootjpaApplication.class, args); } }
プロジェクトツリーのSpringbootjpaApplication.javaを右クリック→実行→javaアプリケーションを選択。
起動に成功したらブラウザからアクセスしてみる。
結局、データ準備が一番時間がかかったのでした。。
■参考リンク
http://qiita.com/Siro/items/4efea6e9ce6bf2961b36
http://dev.classmethod.jp/server-side/java/spring-data-jpa_search/
https://gist.github.com/ryo-murai/3741340
Pingback: Spring Boot + JPA JSONでリクエストしてみる – オフィス エッグファースト
Pingback: ASP.NET WebAPIを試す – オフィス エッグファースト
Pingback: AWS無料枠お試しメモ5.RDS(postgres) – オフィス エッグファースト