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

3.4.0

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

最新版也有这个问题 数据库里有个表的字段是“next”,使用MysqlGenerator生成的JavaBean里面也就有个“next” 然后我们用了com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor,多租户拦截器 然后会报错

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

1.数据库里有个Demo表的字段叫next 2.用MysqlGenerator生成Entity以及Service、Mapper 3.启用TenantLineInnerInterceptor

   MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
        @Override
        public Expression getTenantId() {
            return new LongValue(1);
        }
        // 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
        @Override
        public boolean ignoreTable(String tableName) {
            return !"user".equalsIgnoreCase(tableName);
        }
    }));

4.调用xxxService.list()

报错信息

“Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "next" "NEXT"”

经过定位原因,是因为MybatisPlusInterceptor.intercept方法内调用了CCJSqlParserUtil.parse(sql), CCJSqlParserUtil认为next是一个关键字,解析失败

给next 字段打上@TableField("`next`")注解,问题解决。

是否可以在生成SQL的时候,就给所有字段给加上`来 如: selectid,name` from table。 或者说,给个配置来打开这个功能

Comment From: nancheung

不建议用关键字,我们就算加上反引号,你们也会在别的地方踩坑

Comment From: wzdlagrange

好的,明白了