使Mybatis-Plus支持Gbase8s(国产安全数据库)的分页查询方法

使Mybatis-Plus支持Gbase8s(国产安全数据库)的分页查询方法

所需如下

本教程实现mybatis-plus对Gbase8s的分页查询效果的支持,原生Mybatis-plusb不支持,比如:MySQL、Oracle,DB2等(测试发现Gbase8s好像支持DB2部分语法)。

具体mybatis-plus的源码版本
我使用的版本:
mybatis-plus版本:3.4.3.1
实现①方法如下所示:
  1. 官网下载,当前的源码包**😗*3.4.3.1,修改相应的源码,重新打jar包,放到本地maven仓库,引用其作为项目依赖。
这里有个问题,mybatis-plus源码是gradle项目,没有学习过gradle的同学,可能有点麻烦,本人目前学习中.... 
研究了好久发现,其实mybatis-plus源码是gradle项目有可以打包为maven包的插件
只要需改相应位置的源码,找到打包插件就可以打包为maven包,放到本地仓库,然后需要的项目直接使用修改的版本即可
  • mybatis-plus源代码是gradle项目打包为maven依赖的jar包方式:
    在这里插入图片描述

  • 注:网上有很多方法,但改动都很大,改了好久也不好用,请使用最新版本的mybatis-plus源码包,最好项目使用的版本和你要修改的源码包版本一直,这样覆盖最小,省时省力

2.在下载的源码项目中重写同包同类名时,是需要修改mybatis-plus源代码中的相应类文件,在项目启动的过程中,则会优先加载项目里的代码而不是jar包里的(所以只适合与本地,但只是覆盖,不会改变源代码的哦)

3.在下载的源码项目中重写同包同类名文件,则要修改的mybatis-plus源码中的相应类文件,通过编译后替换解压的源代码中的class类文件,再重新打回jar包(适合本地或服务器,因为这是修改了源代码jar包)

方法②实现如下:
其实比较推荐的,因为要重写相应的类文件,所以要记得引入修改的源文件打的jar包(*对应你下载的源码的版本*)
  1. 目录如图
    在这里插入图片描述

  2. 修改JdbcUtils工具类文件很关键,在url判断中增加GBASE8S判断类型如下

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

在这里插入图片描述

  1. 接下来要在DbType枚举类文件中增加对应值
/**
 * GBase8s
 */
GBASE8S("gbase8s", "南大通用安全数据库"),

在这里插入图片描述

  1. 在接着新增一个方言实现类文件GBase8sDialect.java
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();
    }


}

  1. 最后在DialectFactory工厂类文件中增加需要增加如下
	else if (dbType == DbType.GBASE8S) {
	                dialect = new GBase8sDialect();
	            }

在这里插入图片描述

在此需要修改的类文件有 DbType、JdbcUtils、DialectFactory同时新增一个支持Gbase8s方言的类GBase8sDialect。
  1. 其实上述情况有存在一个小bug:就是当该分页查询有多于两个参数(即不止分页参数,还有条件查询参数)时,因为mp默认分页参数动态SQL参数匹配时都是在在最后面,而Gbase8s的分页参数则是最前面两个(感觉国产数据里有点奇葩,这个语法和之前用的DB2有点像,好像是和DB2有些渊源吧),所以出现分页参数位置匹配不正确的问题!当然,如果仅有Page里的两个分页参数则不影响分页查询。
  2. 具体的解决方法如下所示:
  • 具体的解决办法是:我们可以重写拦截器类PaginationInterceptor(com.baomidou.mybatisplus.extension.plugins),但调试了好久,没太搞清楚里面的的参数源码(源码学习有待加强),所以尝试了好久,直接用了一个笨拙的办法,就是修改参数位置吧 , 简单粗暴,直接在在拦截器类PaginationInterceptor中的beforeQuery方法中把参数List中最后两个参数放置到最前面:在model.consumers(mappings, configuration, additionalParameters)后加以下代码(大约在188行),这样就可以保证Gbase8s分页查询正常使用啦。
  • 为了更好的兼容其他家数据库,我对在对使用Gbase8s数据库做相应的判断,这样就不影响切换其他数据分页查询啦
    在这里插入图片描述
  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);
        }

实现效果如下

在这里插入图片描述

  • 到此你就可以拿Gbase8s快乐的玩耍了
  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus 是一个 MyBatis 的增强工具包,提供了很多方便的功能和特性,其中包括分页查询插件。使用 MyBatis-Plus分页查询插件可以简化分页查询的操作。 在 MyBatis-Plus 中,分页查询可以通过 `Page` 对象和 `PageHelper` 工具类来实现。下面是使用 MyBatis-Plus 进行分页查询的示例代码: 1. 首先,添加 MyBatis-Plus 和分页插件的依赖到你的项目中。你可以在项目的 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 2. 创建一个 `Page` 对象,并设置分页参数: ```java // 创建一个 Page 对象 Page<User> page = new Page<>(current, size); // 设置分页参数 page.setPages(current); // 当前页码 page.setSize(size); // 每页显示的记录数 ``` 3. 在 MyBatis 的 Mapper 接口中使用 `@Param` 注解传递 `Page` 对象,并在 SQL 中使用 MyBatis-Plus 提供的分页查询方法: ```java @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUserPage(@Param("page") Page<User> page, @Param("name") String name); } ``` 4. 在 Service 层中调用分页查询方法: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUserPage(long current, long size, String name) { Page<User> page = new Page<>(current, size); return userMapper.selectUserPage(page, name); } } ``` 这样,你就可以使用 MyBatis-Plus分页查询插件进行分页查询了。记得在你的 SQL 语句中使用 MyBatis-Plus 提供的分页查询方法,而不是传统的 LIMIT 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_22019789

谢谢你的支持,我会再接再厉哒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值