MybatisPlus使用分页插件

时间:2024-7-15    作者:老大夫    分类: 尚庭公寓


使用分页时容易混淆Ipage和Page

Page实现了Ipage接口,构造器用Page。

继承关系:IPage是Page的父接口。IPage定义了分页查询的基本方法,而Page是IPage的实现类,提供了具体的分页查询实现。
引入方式:IPage是MyBatis-Plus 2.0版本之前的接口,而Page是MyBatis-Plus 2.0版本引入的新接口。在2.0版本之后,Page接口替代了IPage接口的使用。

里面的属性很多,只使用一种Page就好,有页面的属性,还有查询到的数据

分页查询是一个很常见的需求,故Mybatis-Plus提供了一个分页插件,使用它可以十分方便的完成分页查询。下面介绍Mybatis-Plus分页插件的用法,详细信息可参考官方文档

  • 配置分页插件

创建com.atguigu.hellomp.config.MPConfiguration配置类,增加如下内容

@Configuration
public class MPConfiguration {

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
  }
}

DbType.MYSQL为数据库类型,记得调整

  • 分页插件使用说明

    • 构造分页对象

    分页对象包含了分页的各项信息,其核心属性如下:

属性名 类型 默认值 描述
records List emptyList 查询数据列表
total Long 0 查询列表总记录数
size Long 10 每页显示条数,默认10
current Long 1 当前页

分页对象既作为分页查询的参数,也作为分页查询的返回结果,当作为查询参数时,通常只需提供currentsize属性,如下

IPage<T> page = new Page<>(current, size);

注:IPage为分页接口,PageIPage接口的一个实现类。

  • 分页查询

Mybatis Plus的BaseMapperServiceImpl均提供了常用的分页查询的方法,例如:

  • BaseMapper的分页查询:
IPage<T> selectPage(IPage<T> page,Wrapper<T> queryWrapper);
  • ServiceImpl的分页查询:
// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
  • 自定义Mapper

对于自定义SQL,也可以十分方便的完成分页查询,如下

Mapper接口:

IPage<UserVo> selectPageVo(IPage<?> page, Integer state);

Mapper.xml

<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">
SELECT id,name FROM user WHERE state=#{state}
</select>

注意Mapper.xml中的SQL只需实现查询list的逻辑即可,无需关注分页的逻辑。

  • 案例实操

分页查询案例如下:

创建PageTest测试类,内容如下

@SpringBootTest
public class PageTest {

@Autowired
private UserService userService;

@Autowired
private UserMapper userMapper;

//通用Service分页查询
@Test
public void testPageService() {
Page<User> page = new Page<>(2, 3);
Page<User> userPage = userService.page(page);
userPage.getRecords().forEach(System.out::println);
}
//需要先创建一个Page把要查询页面的信息封装到Page中,在使用Service对象的page方法查询

//通用Mapper分页查询
@Test
public void testPageMapper() {
IPage<User> page = new Page<>(2, 3);
IPage<User> userPage = userMapper.selectPage(page, null);
userPage.getRecords().forEach(System.out::println);
}

//自定义SQL分页查询
@Test
public void testCustomMapper() {
IPage<User> page = new Page<>(2, 3);
IPage<User> userPage = userMapper.selectUserPage(page);
userPage.getRecords().forEach(System.out::println);
}
}

在UserMapper中声明分页查询方法如下

IPage<User> selectUserPage(IPage<User> page);

创建resources/mapper/UserMapper.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.atguigu.hellomp.mapper.UserMapper">
<select id="selectUserPage" resultType="com.atguigu.hellomp.entity.User">
select *
from user
</select>
</mapper>

注意

Mybatis-Plus中Mapper.xml文件路径默认为:classpath*:/mapper/**/*.xml,可在application.yml中配置以下参数进行修改

mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml


扫描二维码,在手机上阅读

推荐阅读: