关于mybatis-plus中Ipage 、page 和pageUtils中的区别

这篇具有很好参考价值的文章主要介绍了关于mybatis-plus中Ipage 、page 和pageUtils中的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

     在使用人人开源框架的时候,通过逆向工程自动生成了分页功能,然而在使用的时候经常被关于Ipage和page等对象搞混,所以记录这篇文章用来介绍之间的区别

@Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<OrderFormEntity> page = this.page(
                new Query<OrderFormEntity>().getPage(params),
                new QueryWrapper<OrderFormEntity>()
        );

        return new PageUtils(page);
    }

可以看见上面就是逆向工程帮忙生成的分页方法

里面出现了三个对象pageUtils、page和Ipage

先来将pageUtils吧,pageUtils是人人代码自己存在的一个功能类,用来包装Ipage

public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int)page.getTotal();
		this.pageSize = (int)page.getSize();
		this.currPage = (int)page.getCurrent();
		this.totalPage = (int)page.getPages();
	}

目的很简单就是为包装Ipage类,方便后端的调用,下图是后端如何调用pageUtil(其实不用包装也能直接使用Ipage)

 if (data && data.code === 0) {
          this.dataList = data.page.list;
          this.totalPage = data.page.totalCount;
        } else {
          this.dataList = [];
          this.totalPage = 0;
        }
        this.dataListLoading = false;
      });

接下来再来看Ipage的生成,Ipage的生成调用了mybatis-plus自带的方法this.getPage,方法传入两个参数,一个是page类,一个是qw,通过这个方法,用户可以自定义自己想要的分页数据,简单来说就是在page上再筛选而后得到Ipage。

那么Ipage是怎么生成的呢,很简单创建一个Query对象,通过对象内部的getPage方法,传入参数params获得分页数据

那么Page是怎么生成的呢

public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
        //分页参数
        long curPage = 1;
        long limit = 10;

        if(params.get(Constant.PAGE) != null){
            curPage = Long.parseLong((String)params.get(Constant.PAGE));
        }
        if(params.get(Constant.LIMIT) != null){
            limit = Long.parseLong((String)params.get(Constant.LIMIT));
        }

        //分页对象
        Page<T> page = new Page<>(curPage, limit);

        //分页参数
        params.put(Constant.PAGE, page);

        //排序字段
        //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
        String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
        String order = (String)params.get(Constant.ORDER);


        //前端字段排序
        if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
            if(Constant.ASC.equalsIgnoreCase(order)) {
                return  page.addOrder(OrderItem.asc(orderField));
            }else {
                return page.addOrder(OrderItem.desc(orderField));
            }
        }

        //没有排序字段,则不排序
        if(StringUtils.isBlank(defaultOrderField)){
            return page;
        }

        //默认排序
        if(isAsc) {
            page.addOrder(OrderItem.asc(defaultOrderField));
        }else {
            page.addOrder(OrderItem.desc(defaultOrderField));
        }

        return page;
    }
}

传入的params并不会做任何的筛选只会做分页的基本初始化,例如两个参数contant.Pageconstant.LIMIT,如果不做任何要求,那么getPage会使用自己默认的当前页和页最大数,然后创建page对象,在page对象添加排序规则,最后把这个初始好的对象返回回去。

最后this.page再调用底层的selectPage

default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
        return this.getBaseMapper().selectPage(page, queryWrapper);
    }

其实mybatis-plus提供最基本的分页查询就是使用selectPage方法

总结:代码生成器生成的分页查询操作,是通过层层包装selectPage方法,最终获得queryPage,而Ipage是page的包装,pageUtils是Ipage的包装文章来源地址https://www.toymoban.com/news/detail-445413.html

到了这里,关于关于mybatis-plus中Ipage 、page 和pageUtils中的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

    传入tableName参数就可以了,不过只能用$不能用# 因为#会发生预编译,然后会在表名上加引号’\\\'。 新建一个表名拦截类实现TableNameHandler mybatisPlus添加插件 实例: 每天按统计 如果表名为count则加上今天的时间 每次设置 直接设置名字,然后就会改变的。 需要在配置文件中的

    2024年01月16日
    浏览(46)
  • Mybatis-plus中的DML编程控制--增删改的高级操作

    1.1、id生成策略控制 不同的表应用不同的id生成策略 日志:自增(1,2,3,4,…) 购物订单:特殊规则( FQ23948AK3843) 外卖单:关联地区日期等信息(10 04 20200314 34 91) 关系表:可省略id ······ 名称: @TableId 类型: 属性注解 位置:模型类中用于表示主键的属性定义上方 作用:设置当前类中主

    2024年02月16日
    浏览(42)
  • 实现 MyBatis-Plus 中的配置加密功能(使用 AES 算法)

    在项目开发过程中,为了增强数据安全性,我们常常需要对敏感信息进行加密处理。MyBatis-Plus 提供了方便的配置加密功能,使我们能够对配置文件中的敏感信息进行加密和解密操作。本文将详细介绍如何实现 MyBatis-Plus 中的配置加密功能,并给出相应的代码示例。 首先,我们

    2024年02月07日
    浏览(40)
  • MyBatis-Plus中的更新操作(通过id更新和条件更新)

    目录 前言 一、通过id更新 二、条件更新 2.1 使用QueryWrapper进行条件更新 2.2 使用UpdateWrapper进行条件更新 总结  本文学习MP中的更新操作方法,带大家一起查看源码,了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题。 Mybatis-Plus知识点[MyBatis+MyBatis-Pl

    2024年02月06日
    浏览(51)
  • 详解Mybatis-Plus中分页插件PaginationInterceptor, MybatisPlusInterceptor在SpringBoot中的使用

    我们在开发的过程中,经常会遇到分页操作,其分为逻辑分页和物理分页,具体可参考我的博文:

    2023年04月14日
    浏览(45)
  • mybatis-plus中的in的使用,是传Array?还是传List?别再纠结了

    先看个技术题吧。 下面两段代码,执行testFoo,结果分别是什么?   一眼看出来结果的同学,恭喜你,本文内容可以略过。   下面是正文。   我们在查询或更新数据的时候,有时要用到in来过滤数据。比如 SELECT * FROM emax_scbg_order WHERE order_no IN (1305679009380433922,1305405259472830465

    2024年02月14日
    浏览(42)
  • 【Mybatis-Plus】Mybatis-Plus快速入门

    Mybatis-Plus是基于Mybatis的数据库操作组件,其实现的功能完全是Mybatis的功能拓展,不改变Mybatis的使用方式,可以兼容Mybatis的操作方式。 创建一个数据库、一个表进行基础操作: 创建一个Spring项目,项目通过Spring Initlizer创建,不导入任何依赖包,在POM.xml文件中进行依赖导入

    2024年02月07日
    浏览(46)
  • Mybatis-Plus 进阶开发 -- Mybatis-Plus 入门教程(二)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月10日
    浏览(51)
  • Mybatis-Plus(三)--Mybatis-Plus配置和条件构造器

    在MP中有大量的配置,其中有一部分是Mybatis原生的配置,另一部分是MP的配置,详情:https://mybatis.plus/config 【1】configLocation--自己单独的MyBatis配置的路径 SpringMVC的xml中写法: 【2】mapperLocations--MyBatis Mapper所对应的XML文件位置 如果你在Mapper中有自定义方法(XML中有自定义实现

    2024年02月15日
    浏览(62)
  • Mybatis-Plus通用枚举功能 [MyBatis-Plus系列] - 第493篇

    历史文章( 文章 累计490+) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包