Spring MyBatis GeneratorでSQLを実行する

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をインストールします。

2.generatorConfig.xmlを修正します。

3.実行>実行構成で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>

関連の記事

Spring5 MyBatisでselectするサンプル(XML)

△上に戻る