感觉字符串拼接 sql 太麻烦了,尤其是 sql 中间还有动态参数,需要根据参数是否为空动态拼接 sql 段落,代码太丑了,可读性也很差。想问下有没有更好的拼接 sql 方式。
1
cpstar 2022-06-07 19:58:14 +08:00
preparestatement?
|
2
Edward4074 2022-06-07 20:00:57 +08:00 via iPhone
最近刚做了一个基于 mybatis plus 条件构造器的 sql 生成器。动态拼接的部分 mybatis plus 实现得特别优雅
|
3
adoal 2022-06-07 20:02:37 +08:00 via iPhone
不拼接
|
4
git00ll 2022-06-07 20:45:22 +08:00
mybatis 拼 xml 。
mybatis dynamic 代码拼 sql |
5
yousabuk 2022-06-07 21:09:26 +08:00 via iPhone
preparestatement?
{}? |
6
zed1018 2022-06-07 21:29:49 +08:00
JDBC 我不知道,但是如果参数都是 equals 的话,在 JPA 里可以用 Example 查询,hibernate 会自动把有值的字段传递到 where 里
|
7
SMGdcAt4kPPQ 2022-06-07 21:36:41 +08:00
ebean
|
8
dcsuibian 2022-06-07 21:41:36 +08:00 1
拼接 SQL 分分钟被注入,至少上个预编译
|
9
dcsuibian 2022-06-07 21:45:33 +08:00
条件动态的话,感觉 Spring Data JPA 的 Specification 是个好东西
|
10
BBCCBB 2022-06-07 21:46:20 +08:00
mybatis xml.
|
11
EscYezi 2022-06-07 21:56:28 +08:00 via iPhone
mybatis 就是用来解决这个的,虽然复杂到一定程度可读性也不太好,但总比 java 代码拼接强
其实个人觉得最好的方式是 jooq |
12
SMGdcAt4kPPQ 2022-06-07 22:02:38 +08:00
@EscYezi 个人觉得最好的是 EF Core 这种
|
13
zoharSoul 2022-06-07 23:29:31 +08:00
mybatis
|
14
anakinsky 2022-06-08 09:14:48 +08:00
querydsl
|
15
sorakylin 2022-06-08 10:11:35 +08:00
Ktorm 解君愁
|
16
brust 2022-06-08 15:48:52 +08:00
如果不是太追求效率问题 还是用框架吧
|
17
fpure 2022-06-08 15:50:19 +08:00
答案就是 mybatis
|
18
james122333 2022-06-08 19:14:33 +08:00
mybatis 也是要写 if 差别在于写在设定而已 然而设定难以除错和补全
"需要根据参数是否为空" 这个写函数包起来就好(当然三元运算更丑一点) lambda 都可以 为空就拼接空字串 只是看你要不要写的完整 随便一个范例 MyStatement s = QueryCreator.create( "select * from user where status = 1", QueryCreator.ifNotNull( "name", name, "email", email, "address", address ) ) 生成"select * from user where status = 1 where name = ? and email = ? and address = ?" PreparedStatement 再带入参数而已 |
19
james122333 2022-06-08 19:59:23 +08:00 via Android
QueryCreator.ifNotNull(Object ... objs) QueryParams
QueryCreator create( |
20
james122333 2022-06-08 20:00:21 +08:00 via Android
QueryCreator.create(Object ... objs) MyStatement
|
21
suyabgaran 2022-06-09 09:35:10 +08:00
JOOQ 解君愁
|
22
ychost 2022-06-10 11:28:11 +08:00
mybatis-plus YYDS ,JPA (千万别用,MD 升级 API 都没了)
|
23
coderstory 2022-06-16 09:23:02 +08:00
jsqlparser ?
|