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

mybatis plus 3.3.1

该问题是怎么引起的?(最新版上已修复的会直接close掉)

原sql: SELECT id AS userId, name AS nameTest, company_id FROM user WHERE (name LIKE ?) AND user.company_id = 1 ; 被替换后的sql: SELECT id AS user_2020Id, name AS nameTest, company_id FROM user_2020 WHERE (name LIKE ?) AND user_2020.company_id = 1;

userId 被替换成为user_2020Id,导致结果不对。

重现步骤

问题发生在 com.baomidou.mybatisplus.extension.parsers.ITableNameHandler的39行, return sql.replaceAll(tableName, dynamicTableName);

建议修改为: String[] sqls = sql.split(" "); StringBuilder sb = new StringBuilder(); for(String item : sqls){ if(item.trim().equals(tableName))//表名的情况 sb.append(dynamicTableName).append(" "); else if(item.trim().contains(tableName+".")){//表名.字段的情况 sb.append(item.trim().replaceAll(tableName+".",dynamicTableName+".")).append(" "); } else //其他 sb.append(item).append(" "); } return sb.toString();

报错信息

Comment From: qmdx

https://mybatis.plus/guide/dynamic-table-name-parser.html

注意事项:

原理为解析替换设定表名为处理器的返回表名,表名建议可以定义复杂一些避免误替换
例如:真实表名为 user 设定为 mp_dt_user 处理器替换为 user_2019 等