# MyBatisPlus —— 分页插件

官网:https://baomidou.com/guide/page.html

# 1. 创建工程

image-20200925123143732

# 2. 导入 maven 依赖坐标

# 2.1 MyBatisPlus

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>

# 2.2 Druid

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

# 3. 创建数据库 mybatisplus 并建表 tbl_user

image-20200925123916128

# 4. 配置数据库

server:
  port: 8080
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF8&useSSL=false
    username: root
    password: root

# 5. 创建实体类 User

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode(callSuper = false)
@TableName(value = "tbl_user")
public class User {
    
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    private String name;
}

# 6. 编写数据访问接口类 UserMapper

//可以不继承 BaseMapper,如果继承的话就可以使用 MyBatisPlus 自带的一些基础的增删改查功能
public interface UserMapper extends BaseMapper<User> {

    /**
     * 分页查询用户,需要传入一个参数 page
     *  page 有以下属性:
     *      records:查询到的记录的具体信息
     *      total:总数,默认0
     *      size:当前页面大小,默认10
     *      current:当前页面页码,默认1
     *      orders:排序字段信息
     *      optimizeCountSql:自动优化 COUNT SQL,默认true
     *      isSearchCount:是否进行 count 查询,默认true
     *      hitCount:是否命中count缓存,默认false
     *      
     *  我们在使用的时候,主要是传两个参数:① 当前页码;② 页面大小;③ 排序规则(有必要的话)
     */
    IPage<User> selectUserByPage(Page<?> page);

}

# 7. 编写 UserMapper 的映射文件

<?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.hedon.dao.UserMapper">
    <!--
        这里只需要写普通的 SQL 语句就可以了, MyBatisPlus 会帮我们自动封装成分页查询
    -->
    <select id="selectUserByPage" resultType="com.hedon.bean.User">
        select id,name from tbl_user
    </select>
</mapper>

# 8. 编写服务层 UserService

这里就省略写 IUserService 接口再写接口实现类 UserServiceImpl 了,直接就写 UserService 类了。

@Service
public class UserService {
    
    //注入数据访问层 UserMapper 对象
    @Autowired
    private UserMapper userMapper;
    
    //分页查询
    public IPage<User> selectUserByPage(Integer pageNum, Integer pageSize){
        //指定页码和页面大小
        Page<User> page = new Page(pageNum,pageSize);
        return userMapper.selectUserByPage(page);
    }
}

# 9. 注入分页插件 PaginationInterceptor

@Configuration                       //标注这是一个配置类
@MapperScan(value = "com.hedon.**")  //指定扫描的包
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        //当要查询的页码超过最大页码的时候,跳转到查询首页
        paginationInterceptor.setOverflow(true);
        return paginationInterceptor;
    }
}

# 10. 测试

//注入服务层 UserService 对象
@Autowired
private UserService userService;

@Test
public void testSelectUserByPage(){
    //分页查询返回的对象为 IPage 类型的
    IPage<User> userIPage = userService.selectUserByPage(3, 5);
    //IPage 对象中有很多属性,下面举例几个最常用的
    System.out.println("总记录数:" + userIPage.getTotal());
    System.out.println("总页数:" + userIPage.getPages());
    System.out.println("当前页面大小:" + userIPage.getSize());
    System.out.println("当前页码:" + userIPage.getCurrent());
    //最重要的  =>  取出查询到的数据
    System.out.println(" ===============   数据   =================");
    List<User> records = userIPage.getRecords();
    for (User user : records){
        System.out.println(user);
    }
}

image-20200925130155301

上次更新: 8/28/2022, 11:43:26 PM