转自:
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可实现多表联合查询的复杂语句
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)