mybatisplus多数据源中关于差别类型的(mysql,oracle)数据库分页标题解决 ...

打印 上一主题 下一主题

主题 959|帖子 959|积分 2877

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
标题

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

那这个着实是关于数据库方言如何切换的标题,在mybatisplus中,需要配置一下分页拦截器
  1. @EnableTransactionManagement
  2. @Configuration
  3. public class MybatisPlusConfig {
  4.     // 最新版
  5.     @Bean
  6.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  7.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  8.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  9.         return interceptor;
  10.     }
  11. }
复制代码
可以看到这里是写了mysql,那我们如何让他既支持mysql,又支持oracle呢?
配置动态方言
  1. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  2. import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
  4. import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
  5. import org.apache.ibatis.executor.Executor;
  6. public class AutoPaginationInnerInterceptor extends PaginationInnerInterceptor {
  7.    
  8.     @Override
  9.     protected IDialect findIDialect(Executor executor) {
  10.         // 首先尝试获取已经设置的方言
  11.         IDialect dialect = super.findIDialect(executor);
  12.         // 如果方言未设置,则根据数据库连接类型动态获取
  13.         if (dialect == null) {
  14.             return DialectFactory.getDialect(JdbcUtils.getDbType(executor));
  15.         }
  16.         return dialect;
  17.     }
  18. }
复制代码
  1. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  2. import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.transaction.annotation.EnableTransactionManagement;
  6. @EnableTransactionManagement
  7. @Configuration
  8. public class MybatisPlusConfig {
  9.     // 最新版
  10.     @Bean
  11.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  12.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  13.         interceptor.addInnerInterceptor(new AutoPaginationInnerInterceptor());
  14.         return interceptor;
  15.     }
  16. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表