当前位置: 首页 > news >正文

mybatisplus多数据源中关于不同类型的(mysql,oracle)数据库分页问题解决

问题

由于某些原因,项目里面需要多数据源,且其中一个是mysql、另一个是oracle,项目里面使用了mybatisplus,看到了有关于多数据源的解决方案dynamic-datasource-spring-boot-starter,使用了该方案之后,发现查询oracle数据库时如果用到了mybatisplus的分页,也会使用如limit语句,但是oracle是不支持limit的,所以会报错

解决方案

那这个其实是关于数据库方言如何切换的问题,在mybatisplus中,需要配置一下分页拦截器

@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {// 最新版@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

可以看到这里是写了mysql,那我们如何让他既支持mysql,又支持oracle呢?

配置动态方言

import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
import org.apache.ibatis.executor.Executor;public class AutoPaginationInnerInterceptor extends PaginationInnerInterceptor {@Overrideprotected IDialect findIDialect(Executor executor) {// 首先尝试获取已经设置的方言IDialect dialect = super.findIDialect(executor);// 如果方言未设置,则根据数据库连接类型动态获取if (dialect == null) {return DialectFactory.getDialect(JdbcUtils.getDbType(executor));}return dialect;}
}
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {// 最新版@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new AutoPaginationInnerInterceptor());return interceptor;}
}

http://www.mrgr.cn/news/810.html

相关文章:

  • 关于DNS的配置实验
  • 人工智能-自然语言处理(NLP)
  • 【Canvas与艺术】绘制黄色三角三箭头循环标志
  • 加密创投周期进化论:未来或黯淡,但流动性是那道光
  • BIO,NIO,AIO编程实战
  • 数学建模算法总结
  • 深度学习--参数报错问题
  • 自然语言处理系列三十三》 语义相似度》同义词词林》算法原理
  • 出国留学如何兼顾学习与生活?
  • Go语言 类多态
  • 【Spring Boot - 注解】@ResponseBody 注解:处理 JSON 响应
  • Selenium + Python 自动化测试12(unittest组织更多用例)
  • 【学习笔记】多元线性回归模型 —— Matlab
  • 算法题-链表反转
  • 在kotlin compose中打开浏览器以浏览网页的几种方法
  • 多线程执行的3种场景示例代码
  • 如何在桌面同时展示多个窗口
  • 『大模型笔记』从零开始构建AI智能体!
  • 网络协议 十一 ARP,RARP,icmp,websocket,webservice,HTTPDNS,FTP,邮件相关的协议, SMTP,POP,IMAP
  • 基于微信小程序的高校校园信息整合平台的设计与实现