目次
JDBIとは
こんにちは。karintomania(twitter)です。
JDBIはJavaの様々あるORマッパーの一つです。
軽量かつ直感的な使い勝手が人気だということで、使ってみました。
今回はSpring Bootと一緒に使う方法を紹介します。
この記事で利用しているソースは以下に公開しています。
https://github.com/karintomania/jdbi-test
Spring initializer
今日も元気にSpring initializrからスタートです。
適当なプロジェクト名をつけて、依存性は以下の三つを入れておいてください。
- Spring web
- JDBC
- H2
もちろんH2以外でも色々なDBにつなげます。
Build.Gradle
今回はGradleプロジェクトを使用しました。
Mavenでも、まあ大差ないのではないでしょうか。
JDBIのライブラリとして、jdbi3-spring4
を、
プラグインとして、jdbi3-sqlobject
を依存性に追加します。
1 |
|
application.properties
H2の設定をsrc/main/resources/applicaiton.propertiesにしておきます。
ここにDBの接続情報を記述します。
1 | # datasource |
一番下の二行はH2コンソール用の記述です。
Springアプリケーションを起動した状態で
http://localhost:8080/h2 にアクセスするとH2を管理する簡易的なアプリが起動します。
なんというか古き良きJavaって感じのUIで好感が持てますね。
結果などをチラ見するのに便利なので、入れておいて損はないと思います。
![[h2コンソールの画面]](/2020/03/2020-0324-jdbiSpring/h2-console.png)
また、data.sqlという名前でSQLをsrc/main/resources/data.sql
においておくと
勝手に読み込んで実行してくれるので、配置しておきます。
1 | DROP TABLE IF EXISTS TBL_EMPLOYEES; |
Configurationファイル
さて、ようやくJavaです。
Configurationファイルにjdbiの設定をします。
こちらでjdbiインスタンスを生成します。
このjdbiを呼び出して各処理をしていくイメージです。
src/main/java/{ドメイン}/configuration/に配置しておきます。
1 | package com.example.jdbitest.configuration; |
Repository
長々と設定が続きましたが、やっと実装っぽい部分に入ります。
JdbiRepositoryを定義します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36package com.example.jdbitest.repository;
import java.util.List;
import com.example.jdbitest.entity.Employee;
import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
import org.jdbi.v3.sqlobject.customizer.Bind;
import org.jdbi.v3.sqlobject.customizer.BindBean;
import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
public interface EmployeeJdbiRepository{
// 一件挿入
// @GetGeneratedKeysをつけると結果に自動生成されたキーを返してくれる
// @BindBeanアノテーションでEmployeeクラスのfirstName,lastNameプロパティを
// @SqlUpdate内のプレースホルダ(:firstName,:lastName)に紐づけている
int insertEmployee(; Employee employee)
// idで検索
// こちらも@Bindアノテーションでプレースホルダと引数を紐づけている
Employee findById(int id);
// 全件選択
// 検索結果とList<Employee>の紐付けは勝手にやってくれてる
List<Employee> findAll();
}
そいつを呼び出すRepositoryクラスを作ります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package com.example.jdbitest.repository;
import java.util.List;
import com.example.jdbitest.entity.Employee;
import org.jdbi.v3.core.Jdbi;
import org.springframework.stereotype.Component;
public class EmployeeRepository {
private EmployeeJdbiRepository ejr;
public EmployeeRepository(Jdbi jdbi) {
this.ejr = jdbi.onDemand(EmployeeJdbiRepository.class);
}
public int insertEmployee(Employee employee) {
return ejr.insertEmployee(employee);
}
public Employee findById(int id) {
return ejr.findById(id);
}
public List<Employee> findAll() {
return ejr.findAll();
}
}
これで完成です!
とりあえずコントローラを作って使えるようにしてみます。
1 | package com.example.jdbitest; |
Curlコマンドで呼び出してみましょう!
1 | $ curl -X GET http://localhost:8080/emp |
続いてPOSTも。
1
2
3
4
5$ curl -d '{"firstName":"takeshi","lastName":"suzuki"}' -H "Content-Type: application/json" -X POST http://localhost:8080/emp
// 実行結果
$ {"id":3,"firstName":"takeshi","lastName":"suzuki"}
古き良きJavaアプリケーション(言いたいだけ)H2コンソールでも
テーブルの状態を確かめてみます。
![[結果確認]](/2020/03/2020-0324-jdbiSpring/result.png)
しっかり、データが登録されました。
所感
恥ずかしながらこのスライドを見るまでORマッパーはJPA一択だと思っていました。
Java ORマッパー選定のポイント
標準だからという理由だけで使っていたJPAですが、
高機能であるが故に、実装が複雑になりがちなことと、
SQLが自動生成なので、パフォーマンスの調整が難しくなることがあるので覚悟の上で使ってくれとのこと。
JDBIはそう言ったこともなさそうですね。ベタ書きですし。
個人的にはシンプルなものが好きなので、
このくらいの機能感がちょうど良いのかなと思っています。
この記事がお役に立てると幸いです。
それでは今日はこの辺で。
PR
あなたの会社はあなたの技術を評価してくれていますか?
技術力を高めようと頑張っているのに、
技術が評価されないような会社にいたらそれは良い環境なのでしょうか?
エンジニアとして技術を高めたいのなら環境を選ぶことも大事です。
レバテックキャリア
エンジニアとして働いていて実務経験があるなら、
求人数の充実具合からレバテックキャリアがおすすめです。
IT転職ではデファクト・スタンダードですね。
▼レバテック キャリア 登録はこちら▼
Tech Clips
Tech Clipsは年収500万以上&自社サービスを持った会社に特化した求人サイトです。
首都圏限定になってはしまいますが、
収入を増やしたい、自社サービスを持った企業への転職をしたい人におすすめです。