使用分页时容易混淆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 | 当前页 |
分页对象既作为分页查询的参数,也作为分页查询的返回结果,当作为查询参数时,通常只需提供current
和size
属性,如下
IPage<T> page = new Page<>(current, size);
注:IPage
为分页接口,Page
为IPage
接口的一个实现类。
Mybatis Plus的BaseMapper
和ServiceImpl
均提供了常用的分页查询的方法,例如:
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);
对于自定义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
推荐阅读: