记一次Mybatis-Plus动态分表DynamicTableNameInnerInterceptor里无法动态替换表名的坑
2024-08-23 09:57:42
首先上源码
protected String changeTable(String sql) {
ExceptionUtils.throwMpe(null == tableNameHandler, "Please implement TableNameHandler processing logic");
TableNameParser parser = new TableNameParser(sql);//解析出所有语句
List<TableNameParser.SqlToken> names = new ArrayList<>();
parser.accept(names::add);根据指定关键词获取表名
StringBuilder builder = new StringBuilder();
int last = 0;
for (TableNameParser.SqlToken name : names) {
int start = name.getStart();
if (start != last) {
builder.append(sql, last, start);
builder.append(tableNameHandler.dynamicTableName(sql, name.getValue()));
}
last = name.getEnd();
}
if (last != sql.length()) {
builder.append(sql.substring(last));
}
if (hook != null) {
hook.run();
}
return builder.toString();
}
仅支持一下关键词
所以如果使用动态表名替换功能时候使用:INSERT IGNORE 类似这样的语句 IGNORE 无法被识别,所以后面跟着的表名也无法识别
最新文章
- 利用snowfall.jquery.js实现爱心满屏飞
- INSERT INTO .. ON DUPLICATE KEY更新多行记录
- C# 特性详解(上)
- iOS 全局竖屏 单个viewcontroller点击按钮支持横屏
- SQL 存储过程(学生,课程表,选修表)
- li浮动引起ul高度坍陷的解决方法
- 关于eclipse创建Maven项目创建的问题
- webmagic保存数据
- SharePoint 2016 vs部署报错:无法加载功能xxx未能加载文件或程序集xxx或它的某一个依赖项。系统找不到指定的文件
- Haskell语言学习笔记(89)Unicode UTF8
- Android使用binder访问service的方式(一)
- 轻量级Modal模态框插件cta.js
- Codeforces Round #298 (Div. 2) C. Polycarpus&#39; Dice 数学
- 使用jquery加载部分视图02-使用$.ajax()
- 1 - Reverse Integer
- Oracle PL/SQL编程之变量
- DataStage 服务启动
- ASP.NET 中对大文件上传的简单处理
- 【洛谷P1107】 [BJWC2008]雷涛的小猫
- Codeforces Round #459 (Div. 2)
热门文章
- 1.初识 Django
- javaEE(常用API集合<;Collection和Map>;)
- 一个更适合Java初学者的轻量级开发工具:BlueJ
- 轻量级CI/CD发布部署环境搭建及使用_01_基本介绍
- rlwrap解决opengauss,pg,oracle上下左右及回退乱码
- DesignPatternPrinciple-设计模式原则
- 一个方便IO单元测试的C#扩展库
- CF1768F 题解
- .net core 3.1 上传大文件报错413 Payload Too Large
- VMware 关于mininet