Mybatis Plus如何使用自定义方法实现分页呢?
下文笔者讲述Mybatis之Plus实现自定义分页的方法分享,如下所示
写在前面的话
在以前没有自定义分页方法时 我们使用Limit currIndex 和 pageSize 在MyBatis中的sql信息即可实现分页效果 如: <select id="queryUsersBySql" parameterType="map" resultMap="usermapper"> select * from user limit #{currIndex} , #{pageSize} </select> <select id="queryUsersCount" resultType="java.lang.Integer" parameterType="java.util.Map"> select count(*) from user </select> 采用这种模式,编写的sql,非常的冗余 而且不好维护,所以笔者编写一个拦截器 用于实现分页插件
Mybatis-Plus使用说明
添加Mybatis-plus
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.1.8</version> </dependency>
配置拦截器
import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * mybatis-plus配置 * */ @Configuration public class MybatisPlusConfig { /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor page = new PaginationInterceptor(); page.setDialectType("mysql"); return page; } }
service实现
传统的查询方式 SELECT * FROM sys_user WHERE (name='猫猫' AND sex=0 AND age BETWEEN '20' AND '30') LIMIT 0,10 使用Mybtis-plus,可以轻松实现分页查询 //分页查询 10 条姓名为‘猫猫’、性别为男,且年龄在20至30之间的用户记录 list<User> userList = userMapper.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq("name", "猫猫") .eq("sex", 0) .between("age", "20", "30") ) 以上是单表查询的分页实现,多表查询,或者比较复杂的查询语句也可以轻松实现: public Page<User> selectUserPage(Page<User> page, Integer state) { // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题 // page.setOptimizeCountSql(false); // 不查询总记录数 // page.setSearchCount(false); // 注意!! 分页 total 是经过插件自动 回写 到传入 page 对象 return page.setRecords(userMapper.selectUserList(page, state)); } 注意 根据前端传来的分页参数 当前第几页,每页多少条, 构造一个page 对象,初始化这些参数 将page对象传递给mapper 拦截器会自动在sql语句加上limit查询 自动查询总记录数并写回page对象
mapper接口及xml
public interface UserMapper{//可以继承或者不继承BaseMapper /** * <p> * 查询 : 根据state状态查询用户列表,分页显示 * </p> * * @param page * 翻页对象,可以作为 xml 参数直接使用,传递参数 Page 即自动分页 * @param state * 状态 * @return */ List<User> selectUserList(Pagination page, Integer state); } UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页 <select id="selectUserList" resultType="User"> SELECT * FROM user WHERE state=#{state} </select>
注意事项 必须传递page参数 否则不能实现分页 查询sql可实现多表联合查询的复杂语句
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。