jd-opensource / jd-opensource/sql-analysis

SQL 替换功能存在重大缺陷,不能解决 MyBatis 动态 SQL

Aperta
#15 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
241
Fork
42
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

- 目前代码比较乱,最起码的代码格式化都是乱七八糟
- ducc 是个什么鬼玩意,知道它是个配置中心,但是全文找不到安装教程
- SQL 替换功能存在重大缺陷,不能解决 MyBatis 动态 SQL

MyBatis 源码中,根据形参去判断 动态组装的 SQL,被脚本统一成固定 SQL

```Java
// 以下代码仅做示例展示
SqlSession sqlSession = MyBatisUtil.getSqlSession();
mapper = sqlSession.getMapper(TaskMapper.class);

System.out.println("1-----" + mapper.queryAll(Task.builder().title("任务1").build()));
System.out.println("2-----" + mapper.queryAll(Task.builder().createUser("zhangsan1").build()));

SqlReplaceConfig.setReplaceSqlBySqlId("com.jd.sql.analysis_samples.mapper.TaskMapper.queryAll"
, "select * from task where create_user = ?");

System.out.println("3-----" + mapper.queryAll(Task.builder().title("任务2").build()));
System.out.println("4-----" + mapper.queryAll(Task.builder().createUser("zhangsan2").build()));
```

实际运行结果

```Java
Before Replace -> select id, title, content, create_user,create_time, update_time from task WHERE title like ?
com.jd.sql.analysis_samples.mapper.TaskMapper.queryAll -> select id, title, content, create_user,create_time, update_time from task WHERE title like '任务1'
1-----[Task(id=1, title=任务1, content=任务内容1, createUser=zhangsan1, createTime=Thu Oct 12 04:10:43 CST 2023, updateTime=Thu Oct 12 04:10:43 CST 2023)]

Before Replace -> select id, title, content, create_user,create_time, update_time from task WHERE create_user = ?
com.jd.sql.analysis_samples.mapper.TaskMapper.queryAll -> select id, title, content, create_user,create_time, update_time from task WHERE create_user = 'zhangsan1'
2-----[Task(id=1, title=任务1, content=任务内容1, createUser=zhangsan1, createTime=Thu Oct 12 04:10:43 CST 2023, updateTime=Thu Oct 12 04:10:43 CST 2023)]

Before Replace -> select id, title, content, create_user,create_time, update_time from task WHERE title like ?
INFO [main] - sql analysis - sql replace old:select

id, title, content, create_user,create_time, update_time

from task
WHERE title like ?
INFO [main] - sql analysis - sql replace new:select * from task where create_user = ?
com.jd.sql.analysis_samples.mapper.TaskMapper.queryAll -> select * from task where create_user = '任务2'
3-----[] <----------- ❌ ❌ ❌ 这个就异常了

Before Replace -> select id, title, content, create_user,create_time, update_time from task WHERE create_user = ?
INFO [main] - sql analysis - sql replace old:select

id, title, content, create_user,create_time, update_time

from task
WHERE create_user = ?
INFO [main] - sql analysis - sql replace new:select * from task where create_user = ?
com.jd.sql.analysis_samples.mapper.TaskMapper.queryAll -> select * from task where create_user = 'zhangsan2'
4-----[Task(id=2, title=任务2, content=任务内容2, createUser=zhangsan2, createTime=Fri Oct 13 05:10:43 CST 2023, updateTime=Fri Oct 13 05:10:43 CST 2023)]
```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.