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

问题

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

解决方案

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

java 复制代码
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

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

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

配置动态方言

java 复制代码
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;
    }
}
java 复制代码
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;
    }
}
相关推荐
BearHan1 小时前
Sqlsugar调用Oracle的存储过程
oracle·存储过程·orm
superman超哥1 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452001 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina2 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina2 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生2 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程2 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai2 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
Mephisto.java3 小时前
【大数据学习 | kafka高级部分】kafka的kraft集群
大数据·sql·oracle·kafka·json·hbase