检查pom.xml是否正常引入依赖,当前以存在mysql及oracle库的场景为例:

    <!--mysql驱动-->
    <dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<!--oracle驱动-->
	<dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>21.1.0.0</version>
    </dependency>
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
		<version>3.5.2</version>
	</dependency>

一:提示错误:java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

org.springframework.jdbc.UncategorizedSQLException: 
Error attempting to get column 'NAME' from result set. Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK ; 
uncategorized SQLException; SQL state [99999]; error code [17056]; 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK; 
nested exception is java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar):

问题原因:其实异常信息里面已经提示了缺少orai18n.jar

解决办法:在pom.xml增加依赖

<dependency>
    <groupId>cn.easyproject</groupId>
    <artifactId>orai18n</artifactId>
    <version>12.1.0.2.0</version>
</dependency>

2:mybatisPlus中,提供了切换数据源的注解@DS(“”)如果发现注解并不生效,此时可能性有以下几种:

  1. @DS注解使用的接口中,一步一步查找是不是使用了@Transactional(rollbackFor = Exception.class)注解,此时注意,应该使用@DSTransactional注解来回滚事务
  2. 检查配置的数据源值是否和@DS(“value”)的value一致,如果不一致也是没办法切换的。

3:分页不生效

原因:MySQL的limit再Oracle中不能使用,Oracle中使用的是ROWNUM,所以分页会提示sql错误。
此时找到mybatisplus中分页配置,找到一下代码,这两个同时配置也不会生效,此时需要把数据库类型参数去掉:

mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

修改后:

@Configuration
@MapperScan(value = "com.demo.mapper")
public class MyBatisConfig {

    /**
     * 来源官网:https://baomidou.com/pages/2976a3/#spring
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //引入分页拦截器
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
//注释掉这项
//        paginationInnerInterceptor.setDbType(DbType.ORACLE);
        paginationInnerInterceptor.setMaxLimit(-1L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }

}

这样就会自动根据数据库类型进行分页查询

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐