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 ![]() 表驱动,关键你这么多参数连接查询,为啥不上虚拟表? |
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 不用判断就用遍历,反正不管哪种都要把条件跑一遍 |