MyBatis
MyBatisとは
MyBatis はJavaならびに.NET Frameworkで利用可能な、XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークである。
MyBatisとMyBatis-Springを使用したDB Access Architecture
MyBatisを使用したData Access Layer
実装&動作確認
MyBatis使うための最小限の設定
1. application.propertiesまたはapplication.ymlにデータベースへのアクセス情報を追記する。
No. | 設定項目 | 説明 | 例 |
---|---|---|---|
1 | spring.datasource.driver-class-name | JDBC ドライバのクラス名 | postgreSQL: org.postgresql.Driver h2: org.h2.Driver MySQL: com.mysql.cj.jdbc.Driver Oracle: oracle.jdbc.driver.OracleDriver |
2 | spring.datasource.url | データベースの接続 URL | jdbc:mysql://localhost:3306/testdb |
3 | spring.datasource.username | データベースにアクセスするためのユーザー名 | root |
4 | spring.datasource.password | データベースにアクセスするユーザーのパスワード | root |
DTO、Mapperインターフェース、Mapper XML、ServiceとControllerの作成
1. DTOの作成
アプリケーションの下記パッケージに下記のようなMySQLのシステム時刻格納DTO(SystemDate.java)を作成する。
パッケージ:java:jp.co.picasoft.training.common.bean
package jp.co.picasoft.training.common.bean;
import java.sql.Timestamp;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@Data
public class SystemDate {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "Asia/Tokyo")
private Timestamp systemDate;
}
2. Mapperインターフェースの作成
アプリケーションの下記パッケージに下記のようなMySQLのシステム時刻取得用Mapperインタフェース(SystemDateMapper.java)を作成する。
パッケージ:java:jp.co.picasoft.training.common.mapper
package jp.co.picasoft.training.common.mapper;
import org.apache.ibatis.annotations.Mapper;
import jp.co.picasoft.training.common.bean.SystemDate;
@Mapper
public interface SystemDateMapper {
public SystemDate getSystemDate();
}
3. MapperXMLの作成
アプリケーションの下記フォルダーに下記のようなMySQLのシステム時刻取得用Mapper XML(SystemDateMapper.xml)を作成する。
フォルダー:resources:jp/co/picasoft/training/common/mapper
<?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">
<mapper namespace="jp.co.picasoft.training.common.mapper.SystemDateMapper">
<select id="getSystemDate" resultType="jp.co.picasoft.training.common.bean.SystemDate">
SELECT SYSDATE() as system_date;
</select>
</mapper>
4. Serviceの作成
アプリケーションの下記パッケージに下記のようなMySQLのシステム時刻取得用Mapperインタフェース(SystemDateService.java)を作成する。
パッケージ:java:jp.co.picasoft.training.common.service
package jp.co.picasoft.training.common.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import jp.co.picasoft.training.common.bean.SystemDate;
import jp.co.picasoft.training.common.mapper.SystemDateMapper;
@Service
public class SystemDateService {
@Autowired
private SystemDateMapper systemDateMapper;
public SystemDate getSystemDate() {
return systemDateMapper.getSystemDate();
}
}
5. Controllerの作成
アプリケーションの下記パッケージに下記のようなMySQLのシステム時刻取得用Mapperインタフェース(SystemDateAPIController.java)を作成する。
パッケージ:java:jp.co.picasoft.training.common.service
package jp.co.picasoft.training.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jp.co.picasoft.training.common.bean.SystemDate;
import jp.co.picasoft.training.common.service.SystemDateService;
@RestController
@RequestMapping("/systemdate")
public class SystemDateAPIController {
@Autowired
private SystemDateService systemDateService;
@GetMapping("/getsystemdate")
public SystemDate getsSystemDate() {
return systemDateService.getSystemDate();
}
}
6. HTMLの修正
Thymeleaf + Springboot + Mybatis + MySQL + VSCodeーThymeleafとVuejs V2の統合で作成したHTML「vueinthymeleaf.html」のVUEのメソッド「setNameWithDateTime」を下記のように修正する。
setNameWithDateTime: function() {
axios.get('/systemdate/getsystemdate').then((res) => {this.name = res.data.systemDate});
}
動作確認
ブラウザのアドレスバーに下記URLを入力して、Enterをクリックして、画面を表示される。ボタンをクリックして、テキストボックスにデータベースから取得したシステム時刻を設定される。
URL:http://127.0.0.1:8080/greeting/vueinthymeleaf
まとめ
本書では、結構シンプルを実装しました。皆さん参照して、自分のケースに活用してください。
今回はSQL文をXMLファイルに記載されている。実は「annotation 」でも定義できる。
package jp.co.picasoft.training.common.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import jp.co.picasoft.training.common.bean.SystemDate;
@Mapper
public interface SystemDateMapper {
@Select("SELECT SYSDATE() as system_date")
public SystemDate getSystemDate();
}