Jdbc 字符串拼接 sql 最佳实践是什么

2022-06-07 19:49:12 +08:00
 7911364440

感觉字符串拼接 sql 太麻烦了,尤其是 sql 中间还有动态参数,需要根据参数是否为空动态拼接 sql 段落,代码太丑了,可读性也很差。想问下有没有更好的拼接 sql 方式。

3021 次点击
所在节点    Java
23 条回复
cpstar
2022-06-07 19:58:14 +08:00
preparestatement?
Edward4074
2022-06-07 20:00:57 +08:00
最近刚做了一个基于 mybatis plus 条件构造器的 sql 生成器。动态拼接的部分 mybatis plus 实现得特别优雅
adoal
2022-06-07 20:02:37 +08:00
不拼接
git00ll
2022-06-07 20:45:22 +08:00
mybatis 拼 xml 。

mybatis dynamic 代码拼 sql
yousabuk
2022-06-07 21:09:26 +08:00
preparestatement?
{}?
zed1018
2022-06-07 21:29:49 +08:00
JDBC 我不知道,但是如果参数都是 equals 的话,在 JPA 里可以用 Example 查询,hibernate 会自动把有值的字段传递到 where 里
SMGdcAt4kPPQ
2022-06-07 21:36:41 +08:00
ebean
dcsuibian
2022-06-07 21:41:36 +08:00
拼接 SQL 分分钟被注入,至少上个预编译
dcsuibian
2022-06-07 21:45:33 +08:00
条件动态的话,感觉 Spring Data JPA 的 Specification 是个好东西
BBCCBB
2022-06-07 21:46:20 +08:00
mybatis xml.
EscYezi
2022-06-07 21:56:28 +08:00
mybatis 就是用来解决这个的,虽然复杂到一定程度可读性也不太好,但总比 java 代码拼接强

其实个人觉得最好的方式是 jooq
SMGdcAt4kPPQ
2022-06-07 22:02:38 +08:00
@EscYezi 个人觉得最好的是 EF Core 这种
zoharSoul
2022-06-07 23:29:31 +08:00
mybatis
anakinsky
2022-06-08 09:14:48 +08:00
querydsl
sorakylin
2022-06-08 10:11:35 +08:00
Ktorm 解君愁
brust
2022-06-08 15:48:52 +08:00
如果不是太追求效率问题 还是用框架吧
fpure
2022-06-08 15:50:19 +08:00
答案就是 mybatis
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 再带入参数而已
james122333
2022-06-08 19:59:23 +08:00
QueryCreator.ifNotNull(Object ... objs) QueryParams
QueryCreator create(
james122333
2022-06-08 20:00:21 +08:00
QueryCreator.create(Object ... objs) MyStatement

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX