Mybatis Plus如何使用自定义方法实现分页呢?

书欣 MyBatis 发布时间:2022-08-28 12:20:36 阅读数:3480 1
下文笔者讲述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可实现多表联合查询的复杂语句
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202208/4272.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者