V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderstory
V2EX  ›  Java

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

  •  
  •   coderstory ·
    coderstory · 2023-08-09 12:33:16 +08:00 · 1147 次点击
    这是一个创建于 472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    软件环境如下:

    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" 然后找不到表

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

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

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

    建议不要用 plus 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2896 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 07:58 · PVG 15:58 · LAX 23:58 · JFK 02:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.