jd-opensource / jd-opensource/sql-analysis

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

Ouverte
#15 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Java
Étoiles
241
Forks
42
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

- 目前代码比较乱,最起码的代码格式化都是乱七八糟
- 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)]
```

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.