Mybatis Demo搭建

181 阅读2分钟

环境

IntelliJ IDEA 2019.2.4 + JDK 1.8 + maven 3.3.9 + mysql

DB数据准备

提前建好数据库/表,并向表中插入测试数据。

创建空的Maven项目

step1 补充项目基本信息(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返回结果的字段,字段可多不可少。 50%

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表中数据吻合,测试成功。