我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis-Plus实现分页查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis-Plus实现分页查询

Mybatis-Plus实现分页查询

Mybatis-Plus实现分页查询

1.1技术概述

  • 分页查询是一项常用的数据库查询方法,而使用Mybatis-Plus的分页插件,可以为你省去更多的时间去编写复杂的数据库语句,当然,前提是你还是要懂得一些数据库查询语句以及Mybatis-Plus的常用方法。
  • 之所以学习该技术,也是因为在软工实践中有分页查询的需求,为了能够加快开发效率,所以选择了使用分页插件。
  • 难点:需要注意Mybatis-Plus不同版本的要求不同;对Mybatis-Plus的相关方法还是需要进行学习。

1.2技术详述

1.2.1配置分页插件

spring和mybatis-plus整合

                                                                                

spring boot和mybatis-plus整合

//Spring boot方式@Configuration@MapperScan("mapper包名")public class MybatisPlusConfig {    // 旧版    @Bean    public PaginationInterceptor paginationInterceptor() {        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false        // paginationInterceptor.setOverflow(false);        // 设置最大单页限制数量,默认 500 条,-1 不受限制        // paginationInterceptor.setLimit(500);        // 开启 count 的 join 优化,只针对部分 left join        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));        return paginationInterceptor;    }        // 最新版    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));        return interceptor;    }    }

1.2.2自定义分页

1、如果你的mapper没有继承BaseMapper

UserMapper.java 方法内容

public interface UserMapper {//可以继承或者不继承BaseMapper        IPage selectPageVo(Page page, Integer state);}

UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页

UserServiceImpl.java 调用分页方法

public IPage selectUserPage(Page page, Integer state) {    // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分    // page.setOptimizeCountSql(false);    // 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询    // 要点!! 分页返回的对象与传入的对象是同一个    return userMapper.selectPageVo(page, state);}

需要注意的是:
如果返回类型是 IPage 则入参的 IPage 不能为null,因为 返回的IPage == 入参的IPage
如果返回类型是 List 则入参的 IPage 可以为 null(为 null 则不分页),但需要你手动入参的IPage.setRecords(返回的 List);
如果 xml 需要从 page 里取值,需要 page.属性 获取。

流程图:
在这里插入图片描述

2、如果你的mapper继承了BaseMapper

除了上述做法,那你可以使用BaseMapper里声明了的很强大的CRUD方法,可以看下面的例子。

    public BackPage findBackPostList(String tag, int page){        BackPage postBackPage = new BackPage<>();        // 设置条件构造器        QueryWrapper wrapper = new QueryWrapper<>();        wrapper.like("post_title", tag);        wrapper.eq("is_check", NOT_CHECKED);        // 构造分页信息,其中的Page<>(page, PAGE_RECORDS_NUM)的第一个参数是页数,而第二个参数是每页的记录数        Page postPage = new Page<>(page, PAGE_RECORDS_NUM);        // page(postPage, wrapper)这里的第一个参数就是上面定义了的Page对象,第二个参数就是上面定义的条件构造器对象,通过调用这个方法就可以根据你的分页信息以及查询信息获取分页数据        IPage postIPage = page(postPage, wrapper);        // 封装数据,其中getRecords()是获取记录数,getCurrent()获取当前页数,getPages()获取总页数,getTotal()获取记录总数,还要其他更多的方法,大家可以自行查看,在这里就不过多赘述了        postBackPage.setContentList(postIPage.getRecords());        postBackPage.setCurrentPage(postIPage.getCurrent());        postBackPage.setTotalPage(postIPage.getPages());        postBackPage.setTotalNum(postIPage.getTotal());        return postBackPage;    }

其中的BackPage以及Post是我为了封装查询数据写的实体类,大家根据自己的需求来选择就好了。

public class BackPage {    private static final long serialVersionUID=1L;        private long totalPage;        private long currentPage;        private long totalNum;        private List contentList;}

流程图:
在这里插入图片描述

1.3技术使用中遇到的问题和解决过程

  • 关于mybatis-plus版本的问题,3.x版本要使用分页,必须配置插件,否则会没有效果,不像2.x没配插件就是内存分页(在分页的时候,是把所有的数据都查询出来,然后通过RowBounds进行在内存分页)。
         List selectPage(RowBounds rowBounds, Wrapper wrapper);
  • 以及上述提到的IPage传参与返回参数的关系。解决过程就是通过网上查询(博客园、csdn等)获取相关解决方案。

1.4总结

如果你使用了Mybatis-Plus,并且有需要用到分页的功能,可以考虑Mybatis-Plus的分页插件,只需要简单的配置就可以使用,是个不错的选择。

参考文献
https://www.cnblogs.com/FZU-TKQ/p/14944506.html
我是在写项目中想起来了分页查询,以前学过,但是有点忘了,这篇博客园的文章真心不错,让我想起很多知识点。强烈推荐去看看。
加油叭!程序猿!

来源地址:https://blog.csdn.net/lj20020302/article/details/129739505

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis-Plus实现分页查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mybatis-Plus实现分页查询

Mybatis-Plus实现分页查询 文章目录 Mybatis-Plus实现分页查询1.1技术概述1.2技术详述1.2.1配置分页插件1.2.2自定义分页1、如果你的mapper没有继承BaseMapper2、如果你的mapper继
2023-08-17

mybatis plus 分页查询出现count()

出现问题现象 使用mybatisplus分页时候count语句出错,控制台打印的sql为### The error may involve defaultParameterMap, The error occurred while sett
2023-08-17

oracle+mybatis-plus+springboot怎么实现分页查询

本篇内容主要讲解“oracle+mybatis-plus+springboot怎么实现分页查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle+mybatis-plus+springb
2023-06-20

MyBatis-Plus联表查询及分页

MyBatis-Plus联表查询及分页 一、准备工作1、数据库结构以及数据2、依赖3、配置类让mybatis-plus-join在DataScopeSqlInjector中生效4、启动类排除MPJSqlInjector.class
2023-08-16

Mybatis-Plus支持GBase8s分页查询的实现示例

本文主要介绍了使 Mybatis-Plus 支持 GBase8s 的分页查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-09

mybatis-plus多表分页查询最佳实现(简单)

1.简介 在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对
2023-08-23

mybatis-plus分页查询三种方法

mybatis-plus分页查询 一、前期准备表1、配置类 二、使用selectPage1、Service2、结果 三、使用2种分页查询的写法1、xml2、Mapper3、第一种写法4、第一种结果5、第二种写法6、第二种结果
2023-08-20

mybatis-plus分页查询的3种方法

今天小编给大家分享的是mybatis-plus分页查询的3种方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。一、前期准备表CREATE TABLE `school_student`
2023-08-03

MyBatis-Plus中SimpleQuery查询实现

本文主要介绍了MyBatis-Plus中SimpleQuery查询实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

Mybatis分页查询怎么实现

小编给大家分享一下Mybatis分页查询怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们实现查询除了@org.junit.Test public
2023-06-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录