分页插件
引入依赖
于 v3.5.9
起,PaginationInnerInterceptor
已分离出来。如需使用,则需单独引入 mybatis-plus-jsqlparser
依赖
<!-- 引入分页插件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-bom</artifactId>
<version>3.5.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这里需要使用 maven bom
管理依赖,减少版本冲突。 因为 jsqlparser 5.0+
版本不再支持 jdk8
针对这个问题解耦 jsqlparser
依赖。 正确打开姿势,引入 mybatis-plus-bom
模块,然后引入 ..starter
和 ..jsqlparser..
依赖
配置分页插件
在 Spring Boot 项目中,可以通过 Java 配置来添加分页插件:
@Configuration
@MapperScan("com.lin.mymybatisplusdemo.mapper") //可以将主类中的注解移到此处
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
// MybatisPlusInterceptor : mybatis-plus 的拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加内部拦截器 : // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
使用
@Test
public void testPage(){
//设置分页参数
Page<User> page = new Page<>(2, 5);
//执行两条:
// 1- Preparing: SELECT COUNT(*) AS total FROM t_user
// 2- Preparing: SELECT uid AS id,name AS username,age,email,is_deleted FROM t_user LIMIT ?,?
userMapper.selectPage(page, null);
//获取分页数据
List<User> list = page.getRecords();
list.forEach(System.out::println);
System.out.println("当前页:"+page.getCurrent());
System.out.println("每页显示的条数:"+page.getSize());
System.out.println("总记录数:"+page.getTotal());
System.out.println("总页数:"+page.getPages());
System.out.println("是否有上一页:"+page.hasPrevious());
System.out.println("是否有下一页:"+page.hasNext());
}
xml自定义分页
Mapper中定义接口方法
public interface UserMapper extends BaseMapper<User> {
/**
* 根据年龄查询用户列表,分页显示
* @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位
* @param age 年龄
* @return
*/
IPage<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);
}
Page
类实现了 IPage
类,实现了简单分页模型。如果需要实现自己的分页模型,可以继承 Page
类或实现 IPage
类。
public class Page<T> implements IPage<T>
xml中编写SQL
<?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.lin.mymybatisplusdemo.mapper.UserMapper">
<!--SQL片段,记录基础字段-->
<sql id="BaseColumns">uid,name,age,email</sql>
<!--IPage<User> selectPageVo(Page<User> page, Integer age);-->
<select id="selectPageVo" resultType="com.lin.mymybatisplusdemo.pojo.User">
SELECT <include refid="BaseColumns"></include> FROM t_user WHERE age > #{age}
</select>
</mapper>
测试
@Test
public void testSelectPageVo(){
//设置分页参数
Page<User> page = new Page<>(2, 5);
// ==> Preparing: SELECT COUNT(*) AS total FROM t_user WHERE age > ?
//==> Parameters: 20(Integer)
// ==> Preparing: SELECT uid,name,age,email FROM t_user WHERE age > ? LIMIT ?,?
//==> Parameters: 20(Integer), 5(Long), 5(Long)
userMapper.selectPageVo(page, 20);
//获取分页数据
List<User> list = page.getRecords();
list.forEach(System.out::println);
System.out.println("当前页:"+page.getCurrent());
System.out.println("每页显示的条数:"+page.getSize());
System.out.println("总记录数:"+page.getTotal());
System.out.println("总页数:"+page.getPages());
System.out.println("是否有上一页:"+page.hasPrevious());
System.out.println("是否有下一页:"+page.hasNext());
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com