当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
MySQL 数据表:
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`t_key` varchar(100) DEFAULT NULL,
mybatis-plus 实体类:
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField("t_key")
private String key;
重现步骤(如果有就写完整)
当使用如下代码时会报错,其生成的sql会有关键字的别名:
LambdaQueryWrapper<SSetting> wrapper = Wrappers.lambdaQuery();
if (null != setting && null != setting.getKey()) {
wrapper.eq(SSetting::getKey, setting.getKey());
}
return list(wrapper);
生成的sql为:
select id, t_key as key from tb_s_settings
上述sql生成的字段别名t_key as key是关键字,执行失败!
当把字段t_key改成key,@TableField("t_key") 改成 @TableField("key") 却又不会又问题。
所以,当使用lambda查询时,如果数据库表字段名不是关键字,实体类的成员是关键字时,会生成一个关键字的别名,导致sql出错,有没有什么办法解决这种情况的问题。
当然,直接改实体类的成员名是一种方法。mybatis-plus 有没有一个设置可以解决这个问题:别名是关键字时SQL执行出错
Comment From: miemieYaho
数据库字段名和实体属性名不符合规则情况下,select是一定会进行as的 你可以看看 GlobalConfig.DbConfig#propertyFormat 这个配置
Comment From: pengyusong
有效,配置这个可以的,加上这个是不是会增加一个字符串拼接调用,不知道对性能损耗是否严重? 还想问下,为啥这个配置说主键无效,方便答疑解惑么?
@miemieYaho miemieYaho 可以关闭这个问题了
Comment From: miemieYaho
都是启动时完成的事,因为主键没那么多事就不需要处理