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

Spring5とMyBatisでMySQLからselectするサンプルです。XMLの設定ファイルを使用します。
(確認環境:Spring 5.3.7,JDK 11,STS 4)

目次

サンプル Spring5とMyBatisでselectする概要
  pom.xml
  1.起動するファイル(MainController.java)
  2.設定ファイル(applicationContext.xml)
  3.SyainEntity.java
  4.SyainService.java
  5.SyainRepository.java
  6.sql.xml (全件取得/1件取得/select in)
  実行する

Spring5とMyBatisでselectする概要

MainController.javaから起動し
applicationContext.xmlを読み込みSyainService.javaのメソッドを実行します。
sql.xmlにDBから値を取得するselect文があります。

githubにコードがあります。
https://github.com/ut23405/spring5db/tree/master/spring5-mybatis-select

pom.xml

以下のコードをpom.xmlの<project>タグ内に貼り付けます。
<dependencies>が既にある場合は<dependencies>以外の部分をコピペします。
保存するとダウンロードが始まります。右下に進捗バーが出ます。

	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.7</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.7</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.6</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.25</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.3.7</version>
		</dependency>
	</dependencies>

5行目のspring-contextは、xmlファイル読み込み(ClassPathXmlApplicationContext("applicationContext.xml"))で使用します。
17行目のmybatis-springは、SqlSessionFactoryBean(sql.xmlを紐付ける)で使用します。
23行目のmysql-connector-javaは、com.mysql.cj.jdbc.Driverで使用します。
29行目のspring-jdbcは、DriverManagerDataSourceで使用します。

1.起動するファイル(MainController.java)

package com.example.test1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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 gdservice = context.getBean(SyainService.class);
		gdservice.getAllSyain();
		gdservice.getOneSyain(2);
		List<Integer> syain = new ArrayList<>(Arrays.asList(1, 3));
		gdservice.getListSyain(syain);
		
		context.close();
	}
}

applicationContext.xmlから対象のクラスをDIコンテナにbeanとして登録します。
context.getBeanでbean(インスタンス)を取得してメソッドを実行します。
16行目は、全件取得します。
17行目は、引数として数値を指定しています。
19行目は、引数としてリストを指定しています。

2.設定ファイル(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: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">

	<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:/sql.xml" />
	</bean>
	<bean id="SyainRepository" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.example.test1.repository.SyainRepository" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	<context:component-scan base-package="com.example.test1" />
</beans>

10~17行目は、MySQLの接続情報です。
19行目のSqlSessionFactoryBeanはMyBatisとSpringを組み合わせて使う場合必須です。
22行目は、sqlファイル(sql.xml)を指定しています。
24行目のMapperFactoryBeanで指定するMapper(SyainRepository)はインターフェースです。
このインターフェースを実装するクラスのインスタンスはMyBatisが自動で生成します。
28行目は、対象箇所の配下のcomponentをscanしてDIコンテナに登録します。

3.SyainEntity.java

package com.example.test1;

public class SyainEntity {
	Integer id;
	String name;
	String romaji;
	
	public Integer getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public String getRomaji() {
		return romaji;
	}
}

DBから取得した値はMyBatisがセットします。getterは値を取り出す時に使用します。

4.SyainService.java

package com.example.test1.service;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.test1.SyainEntity;
import com.example.test1.repository.SyainRepository;

@Service
public class SyainService {
	@Autowired
	SyainRepository syainRepository;

	public void getAllSyain() {
		List<SyainEntity> list1 = syainRepository.findAll();
		for (SyainEntity s1 : list1) {
			System.out.println(s1.getId() + s1.getName() + s1.getRomaji());
		}
	}
	public void getOneSyain(int num1) {
		SyainEntity s2 = syainRepository.findOne(num1);
		System.out.println("ID:" + num1 + s2.getName());
	}
	public void getListSyain(List<Integer> syain) {
		List<SyainEntity> list2 = syainRepository.findList(syain);
		for (SyainEntity s2 : list2) {
			System.out.println(s2.getId() + s2.getName() + s2.getRomaji());
		}
	}
}

15行目は、DBのデータを全件取得するメソッドです。
21行目は、DBのデータを指定した引数のidで1件取得するメソッドです。
25行目は、リストが引数です。

5.SyainRepository.java

package com.example.test1.repository;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.example.test1.SyainEntity;

public interface SyainRepository {
	List<SyainEntity> findAll();
	SyainEntity findOne(int id);
	List<SyainEntity> findList(
			@Param("syain") List<Integer> syain);
}

インターフェースです。
11行目の@paramの値は、sql.xmlのcollectionとひも付きます。

6.sql.xml (全件取得/1件取得/select in)

<?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="com.example.test1.repository.SyainRepository">
	<select id="findAll" resultType="com.example.test1.SyainEntity">
		select 
		  id,name,romaji
		from 
		  syain
		order by id
	</select>
	<select id="findOne" parameterType="int" resultType="com.example.test1.SyainEntity">
		select 
		  id,name,romaji 
		from 
		  syain 
		where id = #{id}
	</select>
	<select id="findList" resultType="com.example.test1.SyainEntity">
		select 
		  id,name,romaji 
		from 
		  syain 
		where id in
		<foreach item="id" collection="syain" open="(" separator="," close=")">
             #{id}
        </foreach>
	</select>	
</mapper>

5,12,19行目のidの値は、SyainRepository.javaのメソッドとひも付きます。
12行目は、引数がwhereの条件になります。
25~27行目は、selectのinになります。select id,name,romaji from syain where id in (1,3);

実行する

実行結果は、以下のようにDBから値を取得してコンソールに出力します。

以下は、MyBatisのスタートガイドのリンクです。
https://mybatis.org/spring/ja/getting-started.html

関連の記事

Spring Java Configでhello world
Spring Java Configでコンストラクタ

△上に戻る