、実験データベースの構築
- mybatis実験データベースを作成し、後続の実験に備えるためにユーザーテーブルを作成します。
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(4) NOT NULL PRIMARY key,
`name` VARCHAR(20) NOT NULL,
`pwd` VARCHAR(20) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUE
(1,'zsr',''),
(2,'gcc',''),
(3,'bareth','');
、IDEAの新しいプロジェクトは、データベースに接続します。
- 新しい通常のmavenプロジェクトを作成します。
- srcディレクトリを親プロジェクトとして削除します。
- pom.xmlに関連するmavenの依存関係をインポートします。
- MySQL
- MyBatis
- junit
<!--依存関係をインポートする>
<dependencies>
<!--MySQLドライバ>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!--MyBatisドライバ>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--junitドライバ>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
- MySQL への接続
先ほど作成したデータベース「mybatis」を選択し、開きます。
, MyBatisコア設定ファイルの書き込み
- サブモジュールの作成_study01
- モジュールのリソースディレクトリに、新しい mybatis-config.xml ファイルを作成します。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://.//--.td">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
注:以下の部分は、独自のデータベース情報に置き換えてください。
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
MyBatisツールクラスの記述
- サブモジュール maven_study01/src/main/java ディレクトリで、新しい utils ツールキットと新しい MyBatisUtils クラスを作成します。
- このクラスは、XML から SqlSessionFactory を構築するために使用されます。
package utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//SqlSessionFactory から SqlSession を取得する
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//SqlSessionFactory オブジェクトを取得する
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//SqlSessionFactory から SqlSession を取得する
public static SqlSession getSqlSession() {
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
、エンティティクラスに対応するテーブルを作成します。
データベースの各テーブルの各行はエンティティ・クラス・オブジェクトに対応しており、ここでは先に作成したユーザー・テーブルに対応するエンティティ・クラスが作成されています。
- namespace = 独自のマッパーインターフェースの作成
package pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
マッパーインターフェースの記述
- 抽象メソッド getUserList() を使用して、User オブジェクトのコレクションを返します。
package mapper;
import pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
マッパーを書く.xml設定ファイル
サブモジュール/src/main/java/mapperの下に、新しいUserMapping.xmlを作成します。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://.//--.td">
<mapper namespace="mapper.UserMapper">
<select id="getUserList" resultType="pojo.User">
select * from mybatis.user
</select>
</mapper>
- resultType = 戻り値の型
- select 真ん中は sql 文です。
- junit
- selectの真ん中はsql文です。
Junit テストクラスを書く
- ジュニテスト
package mapper;
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.MyBatisUtils;
import java.util.List;
public class UserMapperTest {
@Test
public void test() {
//sqlSession オブジェクトを取得する
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//SQLを実行する
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//sqlSession を閉じる
sqlSession.close();
}
}
Mapper.xml設定ファイルにマッパーインターフェイスと対応する抽象メソッドを追加します。.xml登録の追加
各Mapper.xmlはMyBatisコア設定ファイルに登録する必要があります。
mybatis-config.xmlに登録するには、最後に以下のコードを追加します。
<!--各マッパー.xmlすべてMyBatisコアコンフィギュレーションファイルに登録する必要がある。>
<mappers>
<mapper resource="mapper/UserMapping.xml"/>
</mappers>
ここでのパスは、定義されたxmlコンフィギュレーション・ファイルへのパスです。
注意:パスは / で区切ってください。
テストが実行されます。
テストクラスUserMapperTestの実行に成功しました!
ドライバー・クラス名は廃止されたので、彼がつけた新しいドライバー名を使ってください。
MyBatisコア設定ファイルで、ドライバ名を次のように置き換えるだけです。
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
再度テスト、エラーなし
遭遇する可能性のある問題
- 各Mapper.xmlはMyBatisコア設定ファイルに登録する必要があります。
- 以下の3つのパラメータに対応しています。
デフォルトのmavenリソースファイルはresourceディレクトリに設定されますが、それらはjavaディレクトリに配置され、エクスポートできないので、src/main/javaの下の.propertiesまたは.xmlがエクスポートできるようにリソースフィルタリングを手動で設定する必要があります。
解決策は、pom.xmlに以下の設定を記述することです。
<!--リソースエクスポートの失敗を防ぐために、ビルドでリソースを設定する。>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
ステップの役割とまとめ
プロセス全体を大きく7つのステップにまとめることができます:
- データベース接続インスタンスを取得するためのデータソースと、トランザクションの範囲と制御を決定するトランザクションマネージャを含むMyBatisコア構成xmlファイルを記述します。
- データベース・テーブルに対応するエンティティ・クラスを作成し、JavaBean のプロパティをデータベース・テーブルのフィールドに自動的に関連付けます。
- Mapper.xmlコンフィギュレーションファイルは、上記のマッパーインターフェイスと、それに対応する抽象メソッドをバインドします。
- MyBatisコア設定xmlファイルのMapper.xml設定ファイルに登録を追加します。
- junitテストクラスのテストを書く




