Mybatis-plus支持Gbase8s分页的实现示例

目录
  • 需求
  • 实现方法
  • 法2实现
  • 20210423 修改完善
  • 20210519完善
  • 20210528完善

需求

实现mybatis-plus对gbase8s的分页效果支持,使切换数据库(如oracle/mysql/gbase8s)时同样分页插件代码一样实现分页效果。

mybatis-plus版本:3.3.2

实现方法

修改Mybatis-plus源代码,重新打jar包,引用其作为项目依赖。

尴尬的是,mybatis-plus源码是gradle项目,目前没学习过,结果改好了源码不会打包…

在项目中重写同包同类名的要修改的mybatis-plus源码中的类,在项目启动中,会优先加载项目里的代码而不是jar包里的(适合本地,只覆盖,不改变源代码)

在项目中重写同包同类名的要修改的mybatis-plus源码中的类,编译后替换解压的源代码中的class文件,再重新打回jar包(适合本地/Linux服务器,修改了源代码jar包)

因为暂未接触gradle打包,所以本文介绍了方法2、方法3

法2实现

因为要重写类,所以记得引入原mybatis-plus的jar包依赖

目录如图

修改JdbcUtils,在url判断中增加gbase8s判断

 else if (jdbcUrl.contains(":gbasedbt-sqli:")){
            return DbType.GBASE8S;
        }

在DbType类中增加对应值

/**
 * GBase8s
 */
GBASE8S("gbase8s", "南大通用数据库"),

新增一个方言实现类GBase8sDialect

public class GBase8sDialect implements IDialect {

    @Override
    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
        Integer index = originalSql.toLowerCase().indexOf("select");
        StringBuilder sql = new StringBuilder(originalSql);
        sql.insert(index+6," skip " + FIRST_MARK + " first " + SECOND_MARK + " ");
        return new DialectModel(sql.toString(), offset, limit).setConsumerChain();
    }

}

在DialectRegistry中增加

dialect_enum_map.put(DbType.GBASE8S, new GBase8sDialect());

合计需要修改的类有JdbcUtils、DialectRegistry、DbType,同时新增一个方言类GBase8sDialect。

20210423 修改完善

上述情况有一个小bug:就是当该分页查询有多于2个参数(即不止分页参数)时,因为mp默认分页参数动态SQL参数匹配时在最后面,而Gbase8s的分页参数是最前面两个,所以出现参数位置匹配不正确的问题!当然,如果仅有两个分页参数则不影响

解决方案如下:

  • 具体解决措施:重写拦截器类PaginationInterceptor(com.baomidou.mybatisplus.extension.plugins),因为没搞懂其参数添加源码,所以直接用了个笨办法,修改参数位置
  • 在intercept方法中把参数List中最后两个参数放置到最前面:在model.consumers(mappings, configuration, additionalParameters);后加以下代码(大约在213行)
	mappings.add(0,mappings.get(mappings.size()-2));
	mappings.add(0,mappings.get(mappings.size()-1));
	mappings.remove(mappings.size()-1);
	mappings.remove(mappings.size()-1);

20210519完善

之前的情况完全适用于Gbase8s,但如果考虑多数据库情况下,例切换到Oracle,会因为最后两个参数位置改变导致参数有误,所以再次完善,把之前0423增加的代码改为如下:

if(dbType.equals(DbType.GBASE8S)){
            mappings.add(0,mappings.get(mappings.size()-1));
            mappings.add(0,mappings.get(mappings.size()-2));
            mappings.remove(mappings.size()-1);
            mappings.remove(mappings.size()-1);
        }

20210528完善

之前的代码在IDEA等本地开发环境上可以使用成功,但是当部署在Linux服务器上时,可能还是直接引用了mybatis-plus源代码,没有使用到编译后的覆盖内容,导致不支持gbase8s.完善内容原理如下:

  • 正常使用maven打包工具,项目打包后会有之前加入的覆盖代码编译后的各种class文件
  • 把mybatis-plus(以下简称mp)的原jar包解压(实际上只有两个要改:mybatis-plus-extension-3.3.2.jar和mybatis-plus-annotation-3.3.2.jar),然后把第一步中编译的覆盖内容class文件覆盖到解压后的源代码同路径下(重复的替换,新增的增加)
  • 把替换后的源代码重新打成jar包
    • //进入到源代码目录下,打开命令窗口,使用命令jar cvf xxx.jar *,会在当前目录下生成新的xxxjar包
    • 例:重新打mybatis-plus-extension-3.3.2.jar包
    • 进入解压后的mybatis-plus-extension-3.3.2目录(该目录下有com和META-INF文件夹),cmd打开命令窗口(路径为当前目录路径),使用命令jar cvf mybatis-plus-extension-3.3.2.jar *,会在当前目录下生成一个mybatis-plus-extension-3.3.2.jar包,把这个jar包替换maven库中的同名jar包即可!另一个jar包同理
  • 因为直接替换了源代码jar包,所以可以直接引用,同时可以把之前再项目例加的覆盖内容去了

到此这篇关于Mybatis-plus支持Gbase8s分页的实现示例的文章就介绍到这了,更多相关Mybatis-plus Gbase8s分页 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis-Plus结合Layui实现分页方法

    MyBatis-Plus 使用简单,内置通用 Mapper.通用 Service,仅仅通过少量配置,即可实现单表大部分 CRUD 操作.下面介绍使用 service 中的 page 方法结合 Layui 前端框架,较快速的实现分页效果. 在 pom.xml 中引入依赖 <!-- mybatisplus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus

  • springboot整合mybatis-plus实现多表分页查询的示例代码

    1.新建一个springboot工程 2.需要导入mybatis和mybatis-plus的依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> &l

  • mybatis-plus分页传入参数后sql where条件没有limit分页信息操作

    折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是...这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时...还是自己太笨了-- 但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的.百思不得其解作者的想法... 具体看代码: @Override public PageUtils queryPage(Map<String, Ob

  • Mybatis-plus多条件筛选分页的实现

    目录 1. 数据库映射对象与视图对象 2. 测试SQL 3. MVC层分解 3.1 查询参数封装 3.2 Controller层代码 3.3 Service接口层 3.4 ServiceImpl接口实现层 3.5 Mapper数据持久层 4. 结果 5 补充 5.1 分页失效问题 1. 数据库映射对象与视图对象 笔者在开发过程中在面向客户端展示时都是使用二次封装的视图对象(VO)来进行内容展示. package com.fod.fodapi.vo; import lombok.Data; /**

  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    目录 1 MyBatisPlusConfig 2 UserPagination 3 Mapper 3.1 UserMapper.java 3.2 UserMapper.xml 4 Service 4.1 UserService 4.2 UserServiceImpl 5 UserController 6 调试结果 6.1 QueryWrapper查询分页 6.2 SQL查询分页 1 MyBatisPlusConfig MyBatisPlus配置类. package com.config; imp

  • MyBatis-Plus分页插件不生效的解决方法

    描述 项目中用到boot 整合 mybatis-plus , 个人在使用分页条件查询的时候一直查不出 total, pages, 终于找到原因了. 环境 <springboot.version>2.1.5.RELEASE</springboot.version> <mybatisplus.version>3.1.1</mybatisplus.version> 配置 1.自定义MybatisPlusConfig 配置分页插件 package com.eyela

  • mybatis-plus分页查询的实现示例

    按照官方文档进行的配置:快速开始|mybatis-plus 引入依赖: <!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--

  • springboot整合mybatis-plus 实现分页查询功能

    建一个config类 @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } } 编写controller post /article/search/{page}/{size} @PostMapping("search/{page}/{size}") p

  • Mybatis-plus支持Gbase8s分页的实现示例

    目录 需求 实现方法 法2实现 20210423 修改完善 20210519完善 20210528完善 需求 实现mybatis-plus对gbase8s的分页效果支持,使切换数据库(如oracle/mysql/gbase8s)时同样分页插件代码一样实现分页效果. mybatis-plus版本:3.3.2 实现方法 修改Mybatis-plus源代码,重新打jar包,引用其作为项目依赖. 尴尬的是,mybatis-plus源码是gradle项目,目前没学习过,结果改好了源码不会打包- 在项目中重

  • Mybatis Plus整合PageHelper分页的实现示例

    Mapper Plus自带分页PaginationInterceptor对象,虽然说目前没有什么问题,并且使用简单,但是个人感觉有个弊端:目前个人使用中,想要用Mapper Plus自带的分页功能的话需要在mapper对象中传入一个Page对象才可以实现分页,这样耦合度是不是太高了一点,从web到service到mapper,这个Page对象一直都在传入,这样的使用让人感觉有点麻烦,但是Mapper Plus不得不说真的是很好用的. PageHelper用过的人多多少少了解,这个框架要实现分页只

  • Mybatis Plus 自定义方法实现分页功能的示例代码

    一般物理分页,即通过sql语句分页,都是在sql语句后面添加limit分页语句,在xml文件里传入分页的参数,再多配置一条sql,用于查询总数: <select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper"> select * from student limit #{currIndex} , #{pageSize} </select&

  • 基于Mybatis Plus实现多表分页查询的示例代码

    注意:Mybatis Plus 3.0.7 版本才开始用[自定义sql]+[QueryWrapper],低版本不能使用,还是老实写SQL进行条件拼接 1.源码分析 在Wrapper<T>接口中就有如下方法 /** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法:自定义sql + ${ew.customSqlSegment} * 1.逻辑删除需要自己拼接条件 (之前自定义也同样) * 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) * 3.用法 ${e

  • Mybatis plus 配置多数据源的实现示例

    记得面试时候,有面试官会问道,你们多数据源是怎么实现的呀........,一阵蒙蔽中,然后说道我们之前项目中,没有用到多数据源. 所幸,目前做得项目中有一个业务逻辑中,用到多个数据库数据情况,多数据源华丽上线. 一. mybatis plus 因为我们项目是springboot+mybatis plus,有些人一看,mybatis还知道对吧,mybatis plus是什么鬼,其实字面意思可以理解,就是对mybatis进行一些功能改造,一些封装升级,然后用起来特别方便. 核心功能的升级主要是以下三

  • 一个支持普通分页和综合分页的MVC分页Helper

    本人写的一个分页Helper,支持普通分页(也就是,首页.上一页.下一页.末页等),综合分页(普通分页和数字分页的综合). 下面是分页效果: 分页代码: PagerHelper.cs using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Web; using System.Text; using System.Web.Mvc; using Sy

  • Spring mvc整合mybatis(crud+分页插件)操作mysql

    一.web.xml配置 我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了. web.xml 配置 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/c

  • MyBatis拦截器实现分页功能的实现方法

    MyBatis拦截器实现分页功能的实现方法 前言: 首先说下实现原理.使用拦截器拦截原始的sql,然后加上分页查询的关键字和属性,拼装成新的sql语句再交给mybatis去执行. 除了业务代码之外,需要写的东西不多,提几个关键的: 1.分页对象Page类.给该对象设置一个当前页数(前端给).总记录数(拦截器内赋值)2个参数,他就能帮你计算出分页sql语句用的2个参数. /** * 分页对应的实体类 */ public class Page { /** * 总条数 */ private int t

  • bootstrap paginator分页前后台用法示例

    bootstrap paginator分页前后台用法示例,供大家参考,具体内容如下 准备工作: bootstrap-paginator.js 插件 github开源项目百度自行下载 引入js文件(JQuery1.8+bootstrap.min.js+bootstrap.css+bootstrap-paginator.js) <!--路径根据自己项目修改--> <link rel="stylesheet" href="/bootstrap/css/bootst

随机推荐