当前使用版本(必填,否则不予处理)

3.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

希望集成oracle,mybatis-plus自动生成的sql不符合oracle规范,报错

重现步骤(如果有就写完整)

将mysql-connector-java替换为ojdbc8

报错信息

org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

The error may exist in com/masa/system/mapper/SysRouteConfMapper.java (best guess)

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: SELECT id, route_id, route_name, predicates, filters, uri, order, create_time, update_time, del_flag FROM sys_route_conf WHERE del_flag = '0'

Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)

Comment From: miemieYaho

全局配置 GlobalConfig 自己看

Comment From: blessing-gao

GlobalConfig的dbType被干掉了,我不知道现在应当配置什么属性

public class GlobalConfig implements Serializable {

    /**
     * 是否开启 LOGO
     */
    private boolean banner = true;
    /**
     * 机器 ID 部分
     *
     * @see #setIdentifierGenerator(IdentifierGenerator)
     * @deprecated 3.3.0
     */
    @Deprecated
    private Long workerId;
    /**
     * 数据标识 ID 部分
     *
     * @see #setIdentifierGenerator(IdentifierGenerator)
     * @deprecated 3.3.0
     */
    @Deprecated
    private Long datacenterId;
    /**
     * 是否初始化 SqlRunner
     */
    private boolean enableSqlRunner = false;
    /**
     * 数据库相关配置
     */
    private DbConfig dbConfig;
    /**
     * SQL注入器
     */
    private ISqlInjector sqlInjector = new DefaultSqlInjector();
    /**
     * Mapper父类
     */
    private Class<?> superMapperClass = Mapper.class;
    /**
     * SqlSessionFactory
     */
    private SqlSessionFactory sqlSessionFactory;
    /**
     * 缓存已注入CRUD的Mapper信息
     */
    private Set<String> mapperRegistryCache = new ConcurrentSkipListSet<>();
    /**
     * 元对象字段填充控制器
     */
    private MetaObjectHandler metaObjectHandler;
    /**
     * 主键生成器
     */
    private IdentifierGenerator identifierGenerator;

    @Data
    public static class DbConfig {
        /**
         * 主键类型
         */
        private IdType idType = IdType.ASSIGN_ID;
        /**
         * 表名前缀
         */
        private String tablePrefix;
        /**
         * schema
         *
         * @since 3.1.1
         */
        private String schema;
        /**
         * db字段 format
         * <li> 例: `%s` </li>
         * <p> 对主键无效 </p>
         *
         * @since 3.1.1
         */
        private String columnFormat;
        /**
         * entity字段 format,
         * 只有在 column as property 这种情况下生效
         * <li> 例: `%s` </li>
         * <p> 对主键无效 </p>
         *
         * @since 3.3.0
         */
        private String propertyFormat;
        /**
         * 表名、是否使用下划线命名(默认 true:默认数据库表下划线命名)
         */
        private boolean tableUnderline = true;
        /**
         * 大写命名
         */
        private boolean capitalMode = false;
        /**
         * 表主键生成器
         */
        private IKeyGenerator keyGenerator;
        /**
         * 逻辑删除全局字段 (默认无 设置会自动扫描实体字段)
         */
        private String logicDeleteField;
        /**
         * 逻辑删除全局值(默认 1、表示已删除)
         */
        private String logicDeleteValue = "1";
        /**
         * 逻辑未删除全局值(默认 0、表示未删除)
         */
        private String logicNotDeleteValue = "0";
        /**
         * 字段验证策略之 insert
         *
         * @since 3.1.2
         */
        private FieldStrategy insertStrategy = FieldStrategy.NOT_NULL;
        /**
         * 字段验证策略之 update
         *
         * @since 3.1.2
         */
        private FieldStrategy updateStrategy = FieldStrategy.NOT_NULL;
        /**
         * 字段验证策略之 select
         *
         * @since 3.1.2
         */
        private FieldStrategy selectStrategy = FieldStrategy.NOT_NULL;
    }
}

Comment From: miemieYaho

capitalMode=true

Comment From: blessing-gao

解决了,多谢

Comment From: blessing-gao

还有个问题,配置mybatis-plus.global-config.db-config.capitalMode=true,导致@TableField不生效,这个有解决办法吗

Comment From: blessing-gao

    @TableField(value ="ROUTE_ORDER")
private Integer order;

实际打印出来变成 ROUTE_ORDER AS order

Comment From: miemieYaho

你这种不符合映射规则只能 as, 不想 as就 1. order 改成 routOrder 2. 在 3.3.3.4-SNAPSHOT 版本下自己写resultmap用或者@TableName注解.autoResultMap = true

Comment From: blessing-gao

autoResultMap = true 这个配置暂时解决了我的问题