Spring Boot 集成 Mybatis(XML 方式)和 PageHelper 分页插件

MyBatis 是一款优秀的持久层框架,它对 JDBC 的操作数据库的过程进行封装,支持定制化 SQL、存储过程以及高级映射,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

通俗地讲,MyBatis 就是我们使用 Java 程序操作数据库时的一种工具,可以简化我们使用 JDBC 时的很多操作,而且还简化了数据库记录与 POJO 之间的映射方式。

添加相关依赖

MyBatis 依赖

1
<dependency>
2
    <groupId>org.mybatis.spring.boot</groupId>
3
    <artifactId>mybatis-spring-boot-starter</artifactId>
4
    <version>1.3.1</version>
5
</dependency>

PageHelper 分页插件依赖

1
<dependency>
2
    <groupId>com.github.pagehelper</groupId>
3
    <artifactId>pagehelper-spring-boot-starter</artifactId>
4
    <version>1.2.3</version>
5
</dependency>

配置数据源信息

  • application.properties
1
# 数据源配置
2
spring.datasource.url=jdbc:mysql://localhost:3306/game?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
3
spring.datasource.username=root
4
spring.datasource.password=root
5
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
6
7
# 配置数据源,使用阿里巴巴的 druid 数据库连接池
8
spring.datasource.druid.initial-size=1
9
spring.datasource.druid.min-idle=1
10
spring.datasource.druid.max-active=20
11
spring.datasource.druid.test-on-borrow=true
12
spring.datasource.druid.stat-view-servlet.allow=true

配置 MyBatis 与 PageHelper 信息

1
# MyBatis 配置
2
mybatis.config-location=classpath:mybatis/mybatis-config.xml
3
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
4
mybatis.type-aliases-package=com.example.mybatis.entity
5
6
# PagerHelper  分页
7
pagehelper.helperDialect=mysql
8
pagehelper.reasonable=true
9
pagehelper.supportMethodsArguments=true
10
pagehelper.params=count=countSql

Mapper 映射配置

Mapper 类是一个接口,它的实现类不是一个 JAVA 类,而是一个与之对应的 XML 文件。Mapper 类中声明的方法对应 XML 文件中的一段 SQL 语句 。

Mapper 类

1
public interface StudentMapper {
2
3
    Student selectById(Integer id);
4
5
    List<Student> selectAll();
6
7
    void updateStudent(Student student);
8
9
    void insertStudent(Student student);
10
11
    void deleteStudent(Integer id);
12
13
}

Mapper 映射的 XML 文件

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
<mapper namespace="com.example.mybatis.mapper.StudentMapper">
4
    <resultMap id="BaseResultMap" type="com.example.mybatis.entity.Student">
5
        <result column="id" property="id" javaType="java.lang.Integer"/>
6
        <result column="name" property="name" javaType="java.lang.String"/>
7
        <result column="age" property="age" javaType="java.lang.Integer"/>
8
        <result column="gender"  property="gender" javaType="com.example.mybatis.constant.GenderEnum"/>
9
    </resultMap>
10
11
    <sql id="BaseColumnList" >
12
        id, name, age, gender
13
    </sql>
14
15
    <select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
16
        SELECT
17
        <include refid="BaseColumnList"/>
18
        FROM student
19
        WHERE id = #{id}
20
    </select>
21
22
    <select id="selectAll" resultMap="BaseResultMap">
23
        SELECT
24
        <include refid="BaseColumnList"/>
25
        FROM student
26
    </select>
27
28
    <insert id="insertStudent">
29
       INSERT INTO student (
30
           name,
31
           age,
32
           gender
33
        ) VALUES (
34
          #{name},
35
          #{age},
36
          #{gender}
37
        )
38
    </insert>
39
40
    <update id="updateStudent">
41
        UPDATE student
42
        SET 
43
         <if test="name != null || name != ''">name = #{name},</if>
44
         <if test="age != null">age = #{age},</if>
45
         <if test="gender != null">gender = #{gender}</if>
46
        WHERE id = #{id}
47
    </update>
48
49
    <delete id="deleteStudent">
50
        DELETE FROM student WHERE id = #{id}
51
    </delete>
52
53
</mapper>

其中 namespace 指定了该 XML 文件对应的 Mapper 类。resultMap 的标签,定义的是我们 SQL 查询的字段与实体类之间的映射关系。

编写 Service 类

1
@Service
2
public class StudentService {
3
4
    @Autowired
5
    private StudentMapper studentMapper;
6
7
    public Student getStudent(Integer id) {
8
        Student student = studentMapper.selectById(id);
9
10
        return student;
11
    }
12
13
    public List<Student> listStudent(Integer pageNum, Integer pageSize) {
14
        // 如果 pageSize 为空,默认返回 10 条数据
15
        if (pageSize == null) {
16
            pageSize = 10;
17
        }
18
        // 分页
19
        Page<Student> studentPage = PageHelper.startPage(pageNum, pageSize)
20
                .doSelectPage(() -> studentMapper.selectAll());
21
        List<Student> students = studentPage.getResult();
22
23
        return students;
24
    }
25
26
    public void saveStudent(Student student) {
27
        studentMapper.insertStudent(student);
28
    }
29
30
    public void updateStudent(Student student) {
31
        studentMapper.updateStudent(student);
32
    }
33
34
    public void deleteStudent(Integer id) {
35
        studentMapper.deleteStudent(id);
36
    }
37
}

最后, 详细代码可以查看本示例的 Demo。

参考

MyBatis 中文官网:http://www.mybatis.cn/

PageHelper 官网:https://pagehelper.github.io/

源码地址

springboot-mybatis-xml