Spring Boot 入門示例(十):Spring Boot 集成 Mybatis(XML 方式)和 PageHelper 分頁插件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章