阅读 65

pagehelper内存分页,分页插件pagination

一、前言最近,我想用mybatis实现寻呼功能。 同时定制分页查询语句以扩展pageHelper插件的分页功能。 官方网站建议部署和部署pageHelper的maven依赖项。 请参考以前的文章。 mybatis基于pageHelper插件实现寻呼功能_jiankang66的博客

二、实践首先引入软件包,主要有以下几种,以maven配置形式提供。 您需要下载与以下maven对应的jar包: 否则,分页最后不会生效。

(1) jsqlparser是一种sql分析工具。

ependencygroupidcom.github.page helper/groupidartifactidpagehelper-spring-boot-starter/artifactidversion1.2.2ependencydependencygroupidcom.github.page helper/groupidartifactidpagehelper-spring-boot artifactigure dependencydependencygroupidjsqlparser/groupidartifactidcom.jsql parser/artifactidversion 3.1/version/depepen

静态{ registerdialectalias (' hsqldb ',HsqldbDialect.class ); registerdialectalias('H2 ',HsqldbDialect.class; registerdialectalias (' PostgreSQL ',HsqldbDialect.class ); registerdialectalias('phoenix ',HsqldbDialect.class ); registerdialectalias('MySQL ',MySqlDialect.class; registerdialectalias('Mariadb ',MySqlDialect.class ); 注册目录(SQLite,MySqlDialect.class ); registerdialectalias('Oracle ',OracleDialect.class; registerdialectalias('db2 ',Db2Dialect.class ); 注册目录(Informix,InformixDialect.class ); registerdialectalias (Informix-sqli ),InformixDialect.class; 注册服务器(SQL server,SqlServerDialect.class ); registerdialectalias (' SQL server 2012 ',SqlServer2012Dialect.class ); 注册dialectalias (derby,SqlServer2012Dialect.class ); registerdialectalias('DM ',OracleDialect.class; }如果要定制分页实现,只需继承AbstractHelperDialect类并重写getPageSql方法即可。 静态方法通过调用pageautodialect.registerdialectalias ()自定义方言,稍后进行设置。 例如,我定义了一个新的寻呼实现。 达德利数据库和clickhouse数据库可以通过他实现页面。 如下所示。 您将重点放在getPageSql方法上,在此您可以看到您的数据库只需修改为支持的分页查询语法即可。 他把寻呼语句连接到查询sql语句上。

import com.github.page helper.page; import com.github.page helper.dialect.abstracthelperdialect; import com.github.page helper.page

.PageAutoDialect;import com.github.pagehelper.util.MetaObjectUtil;import org.apache.ibatis.cache.CacheKey;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.mapping.ParameterMapping;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;import java.util.Map;@Componentpublic class MYDialect extends AbstractHelperDialect { static { PageAutoDialect.registerDialectAlias("mydb", MYDialect.class); } public MYDialect() { } @Override public Object processPageParameter(MappedStatement ms, Map<String, Object> paramMap, Page page, BoundSql boundSql, CacheKey pageKey) { paramMap.put(PAGEPARAMETER_FIRST, page.getStartRow()); paramMap.put(PAGEPARAMETER_SECOND, page.getPageSize()); //处理pageKey pageKey.update(page.getStartRow()); pageKey.update(page.getPageSize()); //处理参数配置 if (boundSql.getParameterMappings() != null) { List<ParameterMapping> newParameterMappings = new ArrayList<ParameterMapping>(); if (boundSql != null && boundSql.getParameterMappings() != null) { newParameterMappings.addAll(boundSql.getParameterMappings()); } if (page.getStartRow() == 0) { newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, Integer.class).build()); } else { newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_FIRST, Integer.class).build()); newParameterMappings.add(new ParameterMapping.Builder(ms.getConfiguration(), PAGEPARAMETER_SECOND, Integer.class).build()); } MetaObject metaObject = MetaObjectUtil.forObject(boundSql); metaObject.setValue("parameterMappings", newParameterMappings); } return paramMap; } @Override public String getPageSql(String sql, Page page, CacheKey pageKey) { StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14); sqlBuilder.append(sql); if (page.getStartRow() == 0) { sqlBuilder.append(" LIMIT ? "); } else { sqlBuilder.append(" LIMIT ?, ? "); } pageKey.update(page.getPageSize()); return sqlBuilder.toString(); }}

        最后在配置文件中进行配置,如下

(1)helper-dialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helper-dialect属性来指定分页插件使用哪种方言。

(2)reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

(3)supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 

(3)params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

配置pagehelper.helper-dialect=mydbpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.params = count=countSql

        这样启动以后,在需要分页的查询方法之前调用一下下面方法就可以对查询实现分页。

PageHelper.startPage(Integer.valueOf(pageNum), Integer.valueOf(pageSize)); 三、参考

1、如何使用分页插件

2、项目代码地址:study/mybatis-fenye at main · xujiankang6/study · GitHub

四、总结

        以上就是实现PageHelper插件实现自定义分页所有内容,希望能够帮到大家,可以git下载下来,参考一下,觉得不错的话,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐