MyBatisを使い始める
MyBatis環境構築
IDEAを使用してMyBatis環境を構築する
1. Mavenプロジェクトを作成し、依存関係を追加します
pom.xmlに依存関係を追加します:(log4jは、実行されたsqlステートメントをコンソールに出力して簡単に観察できます)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
<scope>test</scope>
</dependency>
</dependencies>
2.エンティティクラスとdaoの間にインターフェイスを作成します
パッケージ名に注意して、src / main / javaの下にcom.cjx.entityおよびcom.cjx.daoパッケージを作成します。
package com.cjx.entity;
import java.io.Serializable;
import java.util.Date;
/**
* @author :
* @date :Created in 2019/11/7 17:03
* @description : user
*/
public class User implements Serializable {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
package com.cjx.dao;
import com.cjx.entity.User;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/7 17:07
* @description : dao
*/
public interface IUserDao {
/**
* @author :
* @description :查询所有
* @date :Created in 2019/11/7
*/
List<User> findAll();
}
3. MyBatisメイン構成ファイルを作成します:SqlMapConfig.xml
ここでは、事前にデータベースを準備する必要があります。ここではeesy_mybatisと呼ばれ、テーブルはuserと呼ばれ、設計は次のとおりです
。データベースにデータを追加します。
リソースにファイルSqlMapConfig.xmlを作成します
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- MyBatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置MySQL环境 -->
<environment id="mysql">
<!-- 配置事务类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源/连接池 -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1999"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置 -->
<mappers>
<mapper resource="com/cjx/dao/IUserDao.xml"/>
</mappers>
</configuration>
4.マッピング構成ファイルを作成します
リソースにcom.cjx.daoディレクトリを作成してから、ファイルIUserDao.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="com.cjx.dao.IUserDao">
<!-- 配置查询所有 -->
<select id="findAll" resultType="com.cjx.entity.User">
select * from user
</select>
</mapper>
5.log4j構成ファイルを作成します
SqlMapConfigと同じレベルでlog4j.propertiesファイルを作成します
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=../logs/service.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.logger.com.ibatis = debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug
#log4j.logger.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug
環境設定に関する注意事項
- IUserDao.xmlおよびIUserDao.javaの名前は、以前の知識と一致するように作成されました。永続層の操作インターフェース名とマッピングファイルは、MyBatisではマッパーとも呼ばれます。したがって、他のプロジェクトではIUserMapperと呼ばれることがあり、その時点で理解する必要があります。
- アイデアでディレクトリを作成することは、パッケージと同じではありません。パッケージは次のように作成されcom.cjx.daoディレクトリの名前は、「com.cjx.dao」であり、3レベルの構造であり、レベル1ディレクトリであるディレクトリcom.cjx.dao、ディレクトリを作成する必要がありますスラッシュ、つまりcom / cjx / daoを使用して、3レベルのディレクトリを作成します。IDEA2019では、ディレクトリはデフォルトでcom.cjx.daoの形式に折りたたまれます。必要に応じてサービスディレクトリを作成するには、リソースディレクトリにあります。com/ cjx / serviceを作成します。通常どおり、作成できます。
(この図は、com / cjx / daoの場合、IDEA2019もデフォルトでディレクトリをcom.cjx.daoの形式に折りたたむことを示しています)
- MyBatisのマッピング構成ファイルの場所はdaoインターフェースのパッケージ構造と同じである必要があり、パッケージはcom.cjx.daoにあり、xmlもリソースのcom / cjx / daoにある必要があります。
- マッピング構成ファイルのマッパータグの名前空間属性の値は、daoインターフェースの完全修飾クラス名である必要があります。
- マッピング構成ファイルの操作構成(selectなど)。クエリ操作には戻り値があるため、id属性の値はdaoインターフェースのメソッド名である必要があります。したがって、戻り結果のタイプである属性を指定する必要があります。はresultTypeであり、値は戻り値Classです。ここではuserです。
ポイント3、4、5に準拠すると、開発中にdao実装クラスを作成する必要がなくなり、残りの関数はMyBatisによって実装されます。
MyBatisエントリーケース
データベースクエリを実装するためのテスト関数を作成します
test / javaでパッケージcom.cjx.testを作成し、クラスMybatisTestを作成し、クラスにMain関数を作成します。主に次の手順があります。
- 構成ファイルの読み取り
- SqlSessionFactoryファクトリを作成します
- ファクトリを使用してSqlSessionオブジェクトを生成します
- SqlSessionを使用してdaoインターフェースのプロキシオブジェクトを作成します
- プロキシオブジェクトを使用してメソッドを実行する
- リソースを解放する
コードは次のように表示されます。
package com.cjx.test;
import com.cjx.dao.IUserDao;
import com.cjx.entity.User;
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.InputStream;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/8 10:12
* @description : 入门案例
*/
public class MybatisTest {
/**
* @author :
* @description :入门案例
* @param : [args]
* @return : void
* @date :Created in 2019/11/8
*/
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产一个SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user :
users) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
[実行]をクリックした後に発生する可能性のあるいくつかの問題
リリースバージョン5はサポートされていません
これは、MavenのデフォルトのJavaバージョンが1.5であり、ほとんどの人が新しいバージョンをインストールするためです。解決策は次のとおりです。
- [ファイル]-> [設定]-> [ビルド、実行、展開]-> [コンパイラ]-> [Javaコンパイラ]でターゲットバイトコードのバージョンを13に設定します(私の場合は13、その他は1.8の場合があります)
- pom.xmlの<dependencies>と同じレベルで構成に追加します
<properties>
<java.version>13</java.version>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
- [ファイル]-> [プロジェクト構造]-> [プロジェクト設定]-> [プロジェクト]で2つのプロジェクトSDKを変更します
- また、変更の言語レベルでモジュールを
データベースへのアクセス時に発生する可能性のあるタイムゾーンの問題
解決策:データベースリンクの後にタイムゾーンパラメーター「?serverTimezone = UTC」を追加します。つまり、SqlMapConfig.xmlファイルでこの文を変更します。
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?serverTimezone=UTC"/>
アノテーションを使用してこのプロジェクトを再実行します
アノテーションメソッドを使用してマッピング構成ファイルを削除し、代わりにアノテーションを使用してプロジェクトをより簡潔にすることができます。
1.daoインターフェースでSQLステートメントを指定するための注釈を追加します
daoインターフェイスを作成するときに、アノテーション@Select( "select * from user")をfindAllメソッドに追加して、マッピング構成ファイルを置き換えます。コードは次のように表示されます。
package com.cjx.dao;
import com.cjx.entity.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author :
* @date :Created in 2019/11/7 17:07
* @description : dao
*/
public interface IUserDao {
/**
* @author :
* @description :查询所有
* @date :Created in 2019/11/7
*/
@Select("select * from user")
List<User> findAll();
}
2.メイン構成ファイルでマッパーを構成します
SqlMapConfig.xmlで、クラス属性を使用して、マッパーを構成するときにdaoインターフェイスの完全修飾クラス名を指定します。コードは次のとおりです(主に最後の数行が変更されています)。構成が完了したら、次を追加できます。リソースの下のcom.cjx.dao。注釈によってxml構成ファイルが完全に置き換えられるため、IUserDao.xmlファイルが削除されます。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- MyBatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置MySQL环境 -->
<environment id="mysql">
<!-- 配置事务类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源/连接池 -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="1999"/>
</dataSource>
</environment>
</environments>
<!-- 使用xml方式配置时这里指定映射配置文件的位置,但是本次使用注解配置,应该使用class属性指定被注解的dao全限定类名 -->
<mappers>
<mapper class="com.cjx.dao.IUserDao"/>
</mappers>
</configuration>
IUserDao.xmlを削除し、もう一度[実行]をクリックした後でも、正常に実行できます。