当前使用版本(必填,否则不予处理)
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 这个配置暂时解决了我的问题