1
TommyLemon 2018-10-31 18:44:53 +08:00
封装方法,为空不拼接,或者拼接空字符串。
不过你也可以试试 APIJSON, key: value 中 value 为空是不会拼接 SQL 的。 🚀后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构! https://github.com/TommyLemon/APIJSON |
2
lovedebug 2018-10-31 18:47:19 +08:00 via Android
拆分成子查询。。一次性查这么多不怕数据库爆炸吗
|
4
rbe 2018-10-31 18:53:52 +08:00
如果参数来自接口的话,你需要的应该是 JSON Schema 校验的库吧,定义好需要的参数类型、格式之类的,自动校验。
|
6
cyssxt 2018-10-31 19:03:41 +08:00 via iPhone
最多抽一个方法 减少 if 的个数 但是本质上没有什么作用 只是看得舒服点 意义不大
|
7
jswh 2018-10-31 19:06:56 +08:00
这种,列一个参数表数组,然后用循环。
或者全部尝试着取一下成为<k,v>对,取不到 v 就是空。然后过滤空项目,剩下的就拼起来。 |
8
akira 2018-10-31 19:20:43 +08:00
7l 的方法应该就是最好的了,然后还可以扩充一下,做成更通用的方法
|
9
luozic 2018-10-31 19:26:46 +08:00 via iPhone 1
表驱动,关键你这么多参数连接查询,为啥不上虚拟表?
|
10
yehoha OP @jswh 感谢回答。比如说过滤后剩下五个不为空,那么拼接的时候也存在问题的吧?因为要根据每个字段,后面拼接的内容都不一样。
|
12
xiaoxinshiwo 2018-10-31 19:28:56 +08:00
|
13
yehoha OP @xiaoxinshiwo if 全部是并列的 和箭头型不一样。
|
14
luozic 2018-10-31 19:35:01 +08:00 via iPhone
就是不能用 Postgresql ? 那就用代码上策略模式 或者表驱动。 最牛的当然是直接上个状态机,整个 dsl 随便玩。
|
16
yehoha OP @luozic oracle 数据库是不可能改的。策略模式不适用这种吧?我看到 4,5 种策略就要改混合模式,已经算策略膨胀问题了
|
17
luozic 2018-10-31 19:43:32 +08:00 via iPhone
Java 没有模式匹配… scala 和 c#都有
|
18
rayhy 2018-10-31 19:45:49 +08:00 via Android
[<field, sql, used>…] 这样的一个 list 可以吗? field 就是要查询的参数,sql 就是要拼接的语句,used 就是是否拼接,然后循环遍历一遍表确定 used 值,再遍历一边拼接成 SQL。
|
21
annielong 2018-11-01 08:46:58 +08:00
不用判断就用遍历,反正不管哪种都要把条件跑一遍
|