环境
IntelliJ IDEA 2019.2.4 + JDK 1.8 + maven 3.3.9 + mysql
DB数据准备
提前建好数据库/表,并向表中插入测试数据。
创建空的Maven项目
补充项目基本信息(Maven的项目标识GroupId、ArtifactId和Version)
创建后项目接口如下:
项目配置
引入依赖包
需要引入数据库驱动包、mybatis包、单源测试包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mybatis_demo</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!--属性变量-->
<mysql-connector>8.0.17</mysql-connector>
<mybatis-version>3.4.5</mybatis-version>
<junit-version>4.11</junit-version>
</properties>
<dependencies>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
创建和数据库返回结果对应的POJO
在java文件夹下新建包(报名任意取)和POJO类,用于接收SQL执行后的返回结果,必须包含SQL返回结果的字段,字段可多不可少。
package org.town.it.pojo;
public class UserVO {
//和数据库表字段名对应, 不区分大小写
//如果名称不对应,在设置映射条件时该属性值会为空
private int USER_ID;
private String user_name;
private int age;
private String city;
private String job;
public int getUse_id() {
return USER_ID;
}
public void setUse_id(int use_id) {
this.USER_ID = use_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
创建xml格式的SQL映射文件
在resource文件夹下新建mapper文件夹(非必须),在mapper文件夹下创建UserMapper.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指定Dao接口的完整类名,
mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="edu.town.it.UserVO">
<!--id ="接口中的方法名", parameterType="传入的参数类型", resultType = "返回实体类对象,使用包.类名"-->
<select id="findById" parameterType="int" resultType="org.town.it.UserVO">
SELECT
u.user_id,
u.user_name,
u.age,
u.city,
u.job
FROM
tpl_user_t u
WHERE
u.user_id = #{id}
</select>
</mapper>
创建Mybatis资源配置文件
在resource文件夹下创建mybatis-config.xml文件,用于设置数据源连接信息和SQL映射文件路径。
<?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">
<configuration>
<!-- 环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据库连接相关配置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/springbootdb?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- mapping文件路径配置 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
编写单元测试类
在src/test/java下创建和pojo所在包同名的包,在该包下创建UserTest测试类。
引用官方的一段描述说明Mybatis的工作流程: 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。 有两种方式构建 SqlSessionFactory(使用和不使用xml配置文件),使用xml文件管理配置资源个人觉得更直观些,因此这里只展示使用xml配置文件的方式。
package org.town.it;
import org.town.it.UserVO;
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 org.junit.Test;
import java.io.IOException;
import java.io.Reader;
public class UserTest {
@Test
public void userFindByIdTest(){
//定义读取文件名
String resources = "mybatis-config.xml";
//创建流
Reader reader=null;
try {
//读取mybatis-config.xml文件到reader对象中
reader= Resources.getResourceAsReader(resources);
} catch (IOException e) {
e.printStackTrace();
}
//初始化mybatis,创建SqlSessionFactory类的实例
SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);
//创建session实例
SqlSession session=sqlMapper.openSession();
//传入参数查询,返回结果
UserVO user=session.selectOne("findById",1000);
//输出结果
System.out.println(user.getUser_name());
//关闭session
session.close();
}
}
启动测试
在测试类文件中右键启动运行即可
运行结果如下,和DB表中数据吻合,测试成功。