使用 mybatis plus 在 oracle 数据库中执行 insert 方法报错

2023-08-09 12:33:16 +08:00
 coderstory

软件环境如下:

oracle19c 开启大小写敏感 springboot 2.3.12 + mybatis plus 3.5.1 oracle 驱动

   <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.19.0.0</version>
        </dependency>

mapper 类

@Mapper
public interface RolesMapper extends BaseMapper<Roles> {
}
   

调用代码

 rolesMapper.insert(new Roles(null, "11", "11", "11"));

报错信息

### SQL: INSERT INTO "roles"  ( "Name", "State", "home_page" )  VALUES  ( ?, ?, ? )
### Cause: java.sql.SQLSyntaxErrorException: ORA-04043: 对象 "ROLES" 不存在

定位到的出错的代码位于 AutoKeyInfo 类的 getTableName 方法,这个是 oracle 驱动包里的

getTableName 方法传入 insert 查询的 SQL ,substring 分割出 table name , 但是传入的 SQL 莫名其妙执行了转大写操作

String var1 = this.originalSql.trim().toUpperCase();

导致"roles"变成了"ROLES" 然后找不到表

请问这个东西是我配置问题,还是驱动的问题?

1177 次点击
所在节点    Java
3 条回复
OctopusGO
2023-08-09 14:07:10 +08:00
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.getDbConfig().setIsCapitalMode(true or false);
id4alex
2023-08-09 14:08:48 +08:00
有些数据库区分大小写,有些数据库不区分大小写.
Masoud2023
2023-08-09 15:55:47 +08:00
Roles 实体类写 `@TableName` 注解了吗?

mybatis plus 这个东西你就不要指望他有什么质量了,这种莫名其妙的默认行为我最近也发现好几处。

建议不要用 plus 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/963710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX