Spring5とMyBatisでMySQLからselectするサンプルです。XMLの設定ファイルを使用します。
(確認環境:Spring 5.3.7,JDK 11,STS 4)
目次
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
関連の記事