检查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(“”)如果发现注解并不生效,此时可能性有以下几种:
- @DS注解使用的接口中,一步一步查找是不是使用了@Transactional(rollbackFor = Exception.class)注解,此时注意,应该使用@DSTransactional注解来回滚事务
- 检查配置的数据源值是否和@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;
}
}
这样就会自动根据数据库类型进行分页查询