以前、Spring Bootがお手軽ということで試してみたんだけど

Spring Bootを試してみる

Spring Tool Suite(以下「STS」)を導入することでさらにお手軽らしい・・・ので試してみる。

さらにデータ永続化には Spring Data JPA を使用し、DBを介してデータを取得してみた。

 

まずはSTSの導入。
Eclipseのヘルプ→Eclipseマーケットプレースを開き、「STS」で検索・インストール。

 

さっそくプロジェクトの作成。
ファイル→新規→その他をクリックすると「Spring スターター・プロジェクト」があるので選択。
0001

ここは適当に入力。
0002

サンプルプロジェクト作成のための画面となる。
今回はWebアプリ+データ永続化にはJPA+データベースにpostgresを使用するので以下をチェックした。
0003

 

こんな感じでプロジェクトが作成された。いたれりつくせり、、
0004

pom.xmlはこんな感じ。チェックしたものが網羅されているのが確認できる。
0005

 

ここでデータベースを準備。個人では使ったことがなかったので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で見るとこんな感じに。
 
0006
 
 
データを入れる。

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」クラスを作成。

0007

@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();
	}
}

 
プロジェクトツリーはこんな感じに。
0008

 
あとはサービス呼ぶだけ・・・のはず。

 
アプリケーションクラスにコントローラーを担ってもらう。(一般的には分けるべきなのかな?)

@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アプリケーションを選択。

 
起動に成功したらブラウザからアクセスしてみる。
0009
 
結局、データ準備が一番時間がかかったのでした。。

 
■参考リンク
http://qiita.com/Siro/items/4efea6e9ce6bf2961b36

http://dev.classmethod.jp/server-side/java/spring-data-jpa_search/

https://gist.github.com/ryo-murai/3741340