1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Thymeleaf + Springboot + Mybatis + MySQL + VSCodeーMyBatis

Last updated at Posted at 2023-09-22
1 / 13

MyBatis

MyBatisとは

 MyBatis はJavaならびに.NET Frameworkで利用可能な、XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークである。


MyBatisとMyBatis-Springを使用したDB Access Architecture

image.png


MyBatisを使用したData Access Layer

image.png


実装&動作確認
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

SystemDate.java
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

SystemDateMapper.java
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

SystemDateMapper.xml
<?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

SystemDateService.java
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

SystemDateAPIController.java
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
                setNameWithDateTime: function() {
                    axios.get('/systemdate/getsystemdate').then((res) => {this.name = res.data.systemDate});
                }

動作確認

 ブラウザのアドレスバーに下記URLを入力して、Enterをクリックして、画面を表示される。ボタンをクリックして、テキストボックスにデータベースから取得したシステム時刻を設定される。
 URL:http://127.0.0.1:8080/greeting/vueinthymeleaf
image.png


まとめ

 本書では、結構シンプルを実装しました。皆さん参照して、自分のケースに活用してください。
 今回は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();
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?