欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatisPlus|分页插件

程序员文章站 2022-07-13 09:13:23
...

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

1. 创建工程

MyBatisPlus|分页插件

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

MyBatisPlus|分页插件

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);
    }
}

MyBatisPlus|分页插件