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

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: pengyusong

Duplicate of #