光之使者 发表于 2024-8-15 23:34:32

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

标题

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

那这个着实是关于数据库方言如何切换的标题,在mybatisplus中,需要配置一下分页拦截器
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    // 最新版
    @Bean
    public 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 {
   
    @Override
    protected 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 {

    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      interceptor.addInnerInterceptor(new AutoPaginationInnerInterceptor());
      return interceptor;
    }
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: mybatisplus多数据源中关于差别类型的(mysql,oracle)数据库分页标题解决