Spring Boot 集成 Mybatis(XML 方式)和 PageHelper 分頁插件
MyBatis 是一款優秀的持久層框架,它對 JDBC 的操作數據庫的過程進行封裝,支持定製化 SQL、存儲過程以及高級映射,避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 對象)映射成數據庫中的記錄。
通俗地講,MyBatis 就是我們使用 Java 程序操作數據庫時的一種工具,可以簡化我們使用 JDBC 時的很多操作,而且還簡化了數據庫記錄與 POJO 之間的映射方式。
添加相關依賴
MyBatis 依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
PageHelper 分頁插件依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
配置數據源信息
# 數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/game?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 配置數據源,使用阿里巴巴的 druid 數據庫連接池
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true
配置 MyBatis 與 PageHelper 信息
# mybatis 配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.example.mybatis.entity
# pagehelper 分頁
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
Mapper 映射配置
Mapper 類是一個接口,它的實現類不是一個 JAVA 類,而是一個與之對應的 XML 文件。Mapper 類中聲明的方法對應 XML 文件中的一段 SQL 語句 。
Mapper 類
public interface StudentMapper {
Student selectById(Integer id);
List<Student> selectAll();
void updateStudent(Student student);
void insertStudent(Student student);
void deleteStudent(Integer id);
}
Mapper 映射的 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.example.mybatis.mapper.StudentMapper">
<resultMap id="BaseResultMap" type="com.example.mybatis.entity.Student">
<result column="id" property="id" javaType="java.lang.Integer"/>
<result column="name" property="name" javaType="java.lang.String"/>
<result column="age" property="age" javaType="java.lang.Integer"/>
<result column="gender" property="gender" javaType="com.example.mybatis.constant.GenderEnum"/>
</resultMap>
<sql id="BaseColumnList" >
id, name, age, gender
</sql>
<select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT
<include refid="BaseColumnList"/>
FROM student
WHERE id = #{id}
</select>
<select id="selectAll" resultMap="BaseResultMap">
SELECT
<include refid="BaseColumnList"/>
FROM student
</select>
<insert id="insertStudent">
INSERT INTO student (
name,
age,
gender
) VALUES (
#{name},
#{age},
#{gender}
)
</insert>
<update id="updateStudent">
UPDATE student
SET
<if test="name != null || name != ''">name = #{name},</if>
<if test="age != null">age = #{age},</if>
<if test="gender != null">gender = #{gender}</if>
WHERE id = #{id}
</update>
<delete id="deleteStudent">
DELETE FROM student WHERE id = #{id}
</delete>
</mapper>
其中 namespace 指定了該 XML 文件對應的 Mapper 類。resultMap 的標籤,定義的是我們 SQL 查詢的字段與實體類之間的映射關係。
編寫 Service 類
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public Student getStudent(Integer id) {
Student student = studentMapper.selectById(id);
return student;
}
public List<Student> listStudent(Integer pageNum, Integer pageSize) {
// 如果 pageSize 爲空,默認返回 10 條數據
if (pageSize == null) {
pageSize = 10;
}
// 分頁
Page<Student> studentPage = PageHelper.startPage(pageNum, pageSize)
.doSelectPage(() -> studentMapper.selectAll());
List<Student> students = studentPage.getResult();
return students;
}
public void saveStudent(Student student) {
studentMapper.insertStudent(student);
}
public void updateStudent(Student student) {
studentMapper.updateStudent(student);
}
public void deleteStudent(Integer id) {
studentMapper.deleteStudent(id);
}
}
最後, 詳細代碼可以查看本示例的 Demo。
參考
MyBatis 中文官網:http://www.mybatis.cn/
PageHelper 官網:https://pagehelper.github.io/
後記
由於自身能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!
GitHub 源碼地址:springboot-mybatis-xml