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

Spring5とMyBatisでMySQLからselectするサンプルです。XMLの設定ファイルを使用します。

確認環境
・Spring 5.3.7
・JDK 11.0.11
・STS 4 

目次

サンプル Spring5 XMLでhello worldを表示の概要
  pom.xml
  1.起動するファイル(MainController.java)
  2.設定ファイル(applicationContext.xml)
  3.SyainEntity.java
  4.GetDataService.java
  5.SyainRepository.java
  6.sql.xml
  実行する

Spring5とMyBatisでselectするサンプル(XML)の概要

今回作成したファイルです。

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

pom.xml

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

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>5.3.7</version>
	</dependency>
	<!-- 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>

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

package test1;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainController {
	public static void main(String[] args) {

		ClassPathXmlApplicationContext  context =
			new ClassPathXmlApplicationContext("applicationContext.xml");

		GetDataService gdservice = (GetDataService) context.getBean("GetData");
		gdservice.getAllSyain();
		gdservice.getOneSyain(2);
		context.close();
	}
}

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

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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.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="sql.xml" />
	</bean>
	<bean id="SyainRepository" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="test1.SyainRepository" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	<bean id="GetData" class="test1.GetDataService">
		<constructor-arg ref="SyainRepository" />
	</bean>
</beans>

7~15行目は、MySQLの接続情報です。
17行目のSqlSessionFactoryBeanはMyBatisとSpringを組み合わせて使う場合必須です。
19行目は、sqlファイルを指定しています。
21行目のMapperFactoryBeanで指定するMapperはインターフェースである必要があります。(サンプルではインターフェースのSyainRepositoryを指定)。クラスではありません。
25,26行目は、コンストラクタです。test1.SyainRepositoryは引数です。

3.SyainEntity.java

package test1;

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

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

4.GetDataService.java

package test1;

import java.util.List;

public class GetDataService {
	private final SyainRepository sr1;
	public GetDataService(SyainRepository sr1) {
		this.sr1 = sr1;
	}

	public void getAllSyain() {
		List<SyainEntity> list = sr1.findAll();
		for (SyainEntity s1 : list) {
			System.out.println(s1.getId() + s1.getName() + s1.getRomaji());
		}
	}
	public void getOneSyain(int num1) {
		SyainEntity s2 = sr1.findOne(num1);
		System.out.println("ID:" + num1 + s2.getName());
	}
}

11行目は、DBのデータを全件取得するメソッドです。
17行目は、DBのデータを指定した引数のidで1件取得するメソッドです。

5.SyainRepository.java

package test1;

import java.util.List;

public interface SyainRepository {
	public List<SyainEntity> findAll();
	public SyainEntity findOne(int id);
}

インターフェースです。

6.sql.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="test1.SyainRepository">
	<select id="findAll" resultType="test1.SyainEntity">
		select 
		  id,name,romaji
		from 
		  syain
		order by id
	</select>
	<select id="findOne" parameterType="int" resultType="test1.SyainEntity">
		select 
		  id,name,romaji 
		from 
		  syain 
		where id = #{id}
	</select>	
</mapper>

5,12行目のidは、SyainRepository.javaのメソッドのfindAllとfindOneです。
12行目は、引数がwhereの条件になります。

実行する

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

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

関連の記事

Spring5 アノテーションでhello world
Spring5 アノテーションでコンストラクタ

△上に戻る