どうも、とがみんです。
Javaにて、mybatis-spring-boot-starterライブラリを用いて、DBを操作する簡易サンプルアプリケーションを作成したので、それについてまとめいきます。
mybatisによるデータベース操作の仕組みをまとめるというよりは、いかに簡単に実装するかに重きを置いています。
Contents
mybatis-spring-boot-starterとは?
mybatis-spring-boot-starterとは、Spring Bootにて、Mybatisアプリケーションを簡単に構築できるようにするライブラリです。
MyBatisとはO/Rマッパーの一つで、オブジェクト指向プログラミング言語におけるオブジェクトとリレーショナルデータベースの間でデータ形式の相互変換するためのもので、
Javaアプリケーションからデータベースを操作したい場合に使用されます。
今回作成するサンプル
今回作成するサンプルは、超簡易ユーザー情報登録APIです。
ユーザー情報をリクエストとして、Javaアプリケーションに送信し、データベースへその情報を格納し、その結果をレスポンスとして返却するというものです。
Postmanにて、名前とメールアドレスの情報をリクエストとして送信すると、IDを付与し、データベースへの書き込み処理を行い、その結果を返します。
簡易APIの作成については以下を参考にしてください。
開発環境について
今回のサンプルアプリの開発環境としては、IDE(統合開発環境)としてSpring Tool 4を使用し、JDK(Java Development Kit)として、amazon-coretto-11を使用しています。
またデータベースは、以下の記事で構築したPostgreSQLを使用しており、あらかじめUSERSテーブルを作成しています。
1 2 3 4 5 6 7 8 9 10 | CREATE TABLE public."USERS" ( "ID" character varying(100) NOT NULL, "NAME" character varying(100) NOT NULL, "EMAIL" character varying(100) NOT NULL, PRIMARY KEY ("ID") ); ALTER TABLE public."USERS" OWNER to postgres; |
ライブラリのインストール
今回の簡易サンプルを作成するに当たって必要なライブラリの情報をbuild.gradleに記述し、必要なライブラリをインストールします。
今回はデータベースの操作用にmybatis-spring-boot-starterライブラリを使用し、データベースにはpostgresSQLを使うため、postgresqlライブラリを使用します。
1 2 3 4 5 6 7 8 | dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1' runtimeOnly 'org.postgresql:postgresql' } |
プログラムの作成
プログラムは以下のような流れになっています。
クライアントからのリクエストを受け取り、registUserInfoメソッドが実行されます。
その内部で、リクエスト情報にIDを付与し、データベースに登録する情報をUsersTableEntityのオブジェクトに格納します。
UsersTableEntityのオブジェクトに格納した情報を、UsersServiceを通してUsersMapperインターフェースを呼び出し、UsersMapper.xmlに記述されたSQLを実行しデータベースに登録します。
UsersMapperは、オブジェクトとリレーショナルデータベースを相互変換する役割を担っています。
データベースへの処理後、登録結果をレスポンスに詰めて返却します。
以下にそのコードの一部をまとめていきます。
ソースコード全体はGitHubにあげています。
UsersMapper.java
UsersMapper.javaは、USERSテーブルとそのテーブルに紐づいたEntityオブジェクトとの相互変換を行う役割のインターフェースを提供しています。
処理の実態はUsersMapper.xmlに記述されています。
1 2 3 4 5 6 | //①MapperのDI登録 @Mapper public interface UsersMapper { //②データの登録メソッド void insertUser(@Param("user")UsersTableEntity entity); } |
①MapperのDI登録
mybatis-spring-boot-starterは@Mapperアノテーションが書かれているクラスをMapperインターフェースとしてスキャンし、DIコンテナに登録します。
②データの登録メソッド
これはUsersTableEntityのオブジェクトに格納されているデータをデータベースに登録するメソッドです。
@Paramは、引数をuserというパラメータとして、処理の実態に引き渡しています。
処理の実態はUsersMapper.xmlに記述されています。
UsersMapper.xml
UsersMapper.xmlには、データベースへの具体的な処理内容を記述しています。
1 2 3 4 5 6 7 8 9 10 11 12 | <!--?xml version="1.0" encoding="UTF-8" ?--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > //①namespace <mapper namespace="com.example.mapper.UsersMapper"> <insert id="insertUser"> INSERT INTO "USERS" ("ID","NAME","EMAIL") VALUES //②変数の代入 (#{user.id},#{user.name},#{user.email}) </insert> </mapper> |
①namespase
Mapperインターフェースのファイルと、処理の実態が書かれたファイルを紐づけるためには、mapperのnamespace属性にパッケージ名を含めたクラス名を記述する必要があります。
②変数の代入
UsersMapper.javaファイルのパラメーターとして指定した情報を受け取り、#{user.id}のように記述することで値を埋め込むことができます。
application.properties
application.propertiesファイルに、データベースへの接続情報を以下のように記載することで、Spring Bootが自動的に読み込んで、接続のためのDatasourceを生成してくれます。
そのDatasourceを利用して、データベースへアクセスする処理が行われます。
1 2 3 4 | spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:15432/postgres spring.datasource.username=postgres spring.datasource.password=test-pass |
プログラムの実行
Postmanにて、以下のリクエストを作成し、送信します。
1 2 3 4 | { "name":"togaminnnn", "email":"test@gmail.com" } |
データベースに情報が格納され、レスポンスとして、以下のような情報が返却されます。
1 2 3 4 5 6 | { "id": "c833c15c-8908-4362-bb5c-f57e774326e6", "name": "togaminnnn", "email": "test@gmail.com", "resultMessage": "DB書き込み成功" } |
まとめ
Javaアプリケーションにて、mybatis-spring-boot-starterを使用したデータベースを操作するための簡易アプリケーションを作成しました。
ソースコードはGitHubにあげているので、よければ参考にしてみてください。