SpringBoot+GradleアプリでDB連携する
前回はHelloWorldアプリの作成を行いました。SpringBootとGradleのススメ ~HelloWorld編今回はJSPを用いてDB連携してみたいと思います。
はじめに
JPAとは、JPA ( Java Persistence API )、Java標準のORMです。
環境設定
前回の記事SpringBootとGradleのススメ ~HelloWorld編を参考にEclipse等の環境は整えてください。また、今回はDB接続を行うので、ローカルにDBの作成しておいてください。
例)Mac、mysqlを使用してローカルDBの作成
DB作成
mysql> create database testdb;
DB選択
mysql> use testdb;
テーブル作成
mysql> create table idol(id int primary key auto_increment, name varchar(20), age int);
データの挿入
mysql> insert into idol (name, age) values ('miku', 15), ('yayoi', 14);
idol(アイドル)DBを作成し、みく、やよいのデータを入れました。
プロジェクト作成
ファイル>新規>その他>Spring>Springスタータープロジェクト依存関係は以下のものを付与
コア>DevTools
SQL>JPAとMySQL
テンプレート・エンジン>Thymeleaf
Web>Web
適当に名前をつけてプロジェクトの作成。適当にdbtestと名前つけました。
DB接続をする為の設定を、src/main/resources/application.propertiesに記述します。
# DB接続情報 spring.datasource.url=jdbc:mysql://localhost/testdb spring.datasource.username=username spring.datasource.password=password spring.datasource.driverClassName=com.mysql.jdbc.Driver
usernameとpasswordは各自設定したものを入力してください。
処理の実装
今回はDBからデータを取得して画面に表示したいと思います。
モデルとなるJavaクラス(Entity)の作成
JPAを利用する場合、DBのデータとなる部分はEntityと呼ばれるクラスとして定義されます。Entityがどのようなものかというと、DBのレコードをJavaオブジェクトとして保管したものです。今回作成したDBのデータをもとに以下のように作成します。
dbtest/src/main/java/dbtest/entity/Idol.java
package dbtest; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "idol") public class Idol { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @Column(name="age") private Integer age; // getter and setter public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
アノテーションについて
必須項目
@Entity – エンティティクラスであることを示す
@id – プライマリーキーになるものを指定する
@GeneratedValue – プライマリーキーのフィールドに用意されていてAUTOに指定する事で値を自動生成する
任意項目
@Table – クラスに割り当てられるテーブルを指定する。省略した場合はクラス名がテーブル名として扱われる
@Column – フィールドに割り当てられるカラム名を指定する。省略した場合はフィールド名がカラム名として扱われる(nameの他にもlengthやnullableの指定も可能)
DBアクセスのインターフェースとなるJavaクラス(Repository)の作成
EntityはDBのテーブルデータをJava内でオブジェクトとして扱えるようにするクラスなので、単体ではDBアクセスはできません。その為、アクセス手段を提供するインターフェースとしてRepositoryと呼ばれるクラスを作成する必要があります。
dbtest/src/main/java/dbtest/repository/IdolRepository.java
package dbtest.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import dbtest.entity.Idol; @Repository public interface IdolRepository extends JpaRepository<Idol, Integer> { }
JPARepositoryを継承しているのがキモです。
Controllerの作成
リポジトリを利用する為のContorollerを作成します。
dbtest/src/main/java/dbtest/controller/MainController.java
package dbtest.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import dbtest.entity.Idol; import dbtest.repository.IdolRepository; @Controller public class MainController { @Autowired IdolRepository repository; @RequestMapping("/") private ModelAndView index(ModelAndView mav) { mav.setViewName("index"); Iterable<Idol> list = repository.findAll(); mav.addObject("data", list); return mav; } }
@Autowired を使用してIdolRepositoryインスタンスをフィールドに関連づけています。
※インターフェースなのにインスタンスが設定できます。Springがよしなに処理を組み込んで無名クラスのインスタンスが設定されるようです、気になる人は調べてください。
テンプレートの作成
dbtest/src/main/resources/templates/index.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"></meta> <title>INDEXページ</title> </head> <body> <table> <thead> <tr> <th>ID</th> <th>名前</th> <th>年齢</th> </tr> </thead> <tbody> <tr th:each="data:${data}"> <td th:text="${data.id}"></td> <td th:text="${data.name}"></td> <td th:text="${data.age}"></td> </tr> </tbody> </table> </body> </html>
テンプレートエンジンとしてthymeleafを使用してます。
アプリケーションの起動
さて、一通り実装が終わりましたのでアプリケーションを起動します。プロジェクトを右クリック>実行>SpringBootアプリケーションを選択。アプリケーションがローカルホストで立ち上がります。
http://localhost:8080/ にアクセス
データの取得に成功しました。
参考サイト
Spring Bootでデータベースに接続する – Qiita
JPAでデータベースを使おう!(1/5):Spring BootではじめるMVC …
SpringBootをEclipse、Gradleで使ってみる - (6)JPAでDB(MySQL)に
コメント