SpringのMyBatis GeneratorでSQL(select,insert,update)するサンプルです。
(確認環境:Spring Boot 2.5,JDK 11,MySQL)
目次
サンプル | MyBatis Generatorでファイルを生成する概要 |
MyBatis Generatorの取得と設定 | |
DBを検索/更新するファイル(SyainService.java) | |
起動するファイル(MainController.java) | |
MyBatis設定ファイル(generatorConfig.xml) | |
設定ファイル(applicationContext.xml) |
MyBatis Generatorでファイルを生成する概要
MyBatis Generatorを実行すると指定したDBのテーブルを元にmapperファイル等を生成します。
自分でファイルを作成する手間が省けます。
MyBatis Generatorの実行前
MyBatis Generatorの実行後
generatorConfig.xmlを実行すると以下の4ファイルが生成されました。
githubにコードがあります。
https://github.com/ut23405/spring5db/tree/master/spring-mybatis-generator
MyBatis Generatorの取得と設定
1.STSのヘルプ>EclipseマーケットプレースからMyBatis Generator(1.4.0)をインストールします。
2.プロジェクトエクスプローラーで右クリックし「新規」→「その他」→「MyBatis」→「MyBatis Generator Configuration File」をクリックてファイルを作成します。
3.generatorConfig.xmlを修正します。
4.実行>実行構成でgeneratorConfig.xmlを登録し実行するとファイルが生成されます。
DBを検索/更新するファイル(SyainService)
package com.example.test1.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.example.test1.Syain;
import com.example.test1.SyainExample;
import com.example.test1.repository.SyainMapper;
@Service
public class SyainService {
private final SyainMapper syainMapper;
public SyainService(SyainMapper syainMapper) {
this.syainMapper = syainMapper;
}
public void getSyain1(int num) {
Syain s1 = syainMapper.selectByPrimaryKey(num);
System.out.println(s1.getId() + s1.getName() + s1.getRomaji());
}
public void getSyain2() {
SyainExample example = new SyainExample();
example.createCriteria().andRomajiLike("%sa%"); // あいまい検索
example.setOrderByClause("id"); // idの昇順
List<Syain> s1 = syainMapper.selectByExample(example);
for (Syain syain : s1) {
System.out.println(syain.getId() + syain.getName() + syain.getRomaji());
}
}
public void updateSyain() {
// insert
Syain syain1 = new Syain();
syain1.setId(100);
syain1.setName("テスト");
syain1.setRomaji("test");
syainMapper.insert(syain1);
// update
Syain syain2 = new Syain();
syain2.setId(2); // update対象のキーを指定
syain2.setName("変更テスト");
syainMapper.updateByPrimaryKeySelective(syain2);
}
}
20行目のselectByPrimaryKeyは、引数にキーを指定すると対象のデータを取得します。
selectByPrimaryKeyは、SyainMapper.java、SyainMapper.xmlにあります。
26行目は、likeによるあいまい検索です。
27行目は、並び順でidの昇順です。
36~39行目は、インスタンスを生成して値をセットしています。
40行目は、インスタンスを引数にしてinsertメソッドで登録します。
44行目は、update対象のキーです。
45行目は、更新する値です。
46行目は、インスタンスを引数にしてupdateByPrimaryKeySelectiveメソッドで更新します。
起動するファイル(MainController.java)
package com.example.test1;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.example.test1.service.SyainService;
public class MainController {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
SyainService syainService = context.getBean(SyainService.class);
syainService.getOneSyain(2);
context.close();
}
}
applicationContext.xmlから対象のクラスをDIコンテナにbeanとして登録します。
context.getBeanでbean(インスタンス)を取得してメソッドを実行します。
MyBatis設定ファイル(generatorConfig.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="PostgresTables" targetRuntime="MyBatis3">
<!-- DB接続情報 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3309/testphp"
userId="root"
password="">
</jdbcConnection>
<!-- モデルの設定 -->
<javaModelGenerator targetPackage="com.example.test1" targetProject="spring-mybatis-generator/src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- XMLのSQL -->
<sqlMapGenerator targetPackage="com.example.test1.config"
targetProject="spring-mybatis-generator/src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- マッパークラス -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.test1.repository"
targetProject="spring-mybatis-generator/src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- テーブルを指定 -->
<table schema="testphp" tableName="syain">
<property name="useActualColumnNames" value="true" />
</table>
</context>
</generatorConfiguration>
DB接続情報、モデルの設定、XMLのSQL、マッパークラス、使用するテーブルを指定しています。
設定ファイル(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3309/testphp" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations"
value="classpath:/com/example/test1/config/SyainMapper.xml" />
</bean>
<context:component-scan base-package="com.example.test1" />
<mybatis:scan base-package="com.example.test1.repository" />
</beans>
関連の記事