Spring BootでMySQLに接続してJPAを使う方法

spring

今回はSpring BootでMySQLへ接続して、Spring Dao JPAでselectでデータをとってくるところまでを紹介していきます。

従来のSpring Frameworkに比べると格段とDB接続が楽になりました。

[スポンサーリンク]

Mavenのpom.xmlファイル

以下2つのdependencyをpom.xmlに追加して下さい。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>

application.yml

データベースの接続情報は、main/resources/application.ymlに定義します。
DBの接続設定はこれだけでOKです。
あとはSpring Boot起動時に自動的にこのファイルを読み込んでくれます。
従来のSpring FrameworkのDB設定よりもだいぶ楽になりましたね。

spring:
  datasource:
    url:  jdbc:mysql://127.0.0.1:3306/example
    username: XXX
    password: XXX
    driverClassName: com.mysql.jdbc.Driver

yml形式のファイルよりproperties形式の方がよいという方も多いと思います。application.propertiesでもOKです。ymlのかわりにpropertiesを使っても自動で読み込んでくれます。

今回使用するテーブル構成

今回JPAでselectするテーブルはこちら。IDと名前だけを持ったシンプルなテーブルを使っていきます。

mysql> desc sample;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
mysql> select * from sample;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | test_name |
+----+-----------+

エンティティクラス

テーブルのデータを格納するクラスです。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="sample")
public class Sample {

    @Id
    @Column(name="id")
    private Integer id;

    @Column(name="name")
    private String name;

    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;
    }
}

Daoクラス

実際にSQLを発行するクラス(インターフェース)です。
特に自分でselect文を作成する必要はありません。今回はデフォルトのselect文を使用するのでselect文も追加メソッドも必要ないです。

import org.springframework.data.jpa.repository.JpaRepository;

import jp.co.example.entity.Sample;

public interface SampleDao extends JpaRepository <Sample, Integer> {

}

Daoクラスを実行する

先程のDaoクラスをこちらのコントローラクラスで実行して、戻り値をブラウザに返却します。
findAll()はテーブルデータを全件取得するというメソッドです。

@RestController
public class SampleController {

    @Autowired
    private SampleDao sampleDao;
    
    @RequestMapping(method = RequestMethod.GET)
    @Transactional
    public List<Sample> get() {
        return sampleDao.findAll();
    }
}

実行結果

先程のコントローラクラスをブラウザからコールすると以下のようにDB値がJSON形式で表示されます。
もちろんテーブル内に複数レコードあれば全ての値がここに表示されます。

[{"id":1,"name":"test_name"}]

springとjavaのバージョン

Spring Bootのバージョンは、1.5.2を使っています。
javaは、version 8です。

サンプルソース

上記のロジックを使ったサンプルプロジェクトをコチラのGitHubで公開しています。

さいごに

Spring BootになってDB接続が従来のものと比べると格段と楽になりました。

まさかDB接続設定がファイル1つで済む日がくるなんて、あのxml地獄だったSpring2.4以前のバージョンでは考えられないですね。

それでは!