2:where 条件如果来点 and or 以及 "小括号" 的组合,优先级就不好处理,例如下面的 sql: select * from t where a = x and b = y or c = z and ( c not in d or d = e) or f != g 以上 sql 中的 or 的优先级比 and 低,小括号中 or 的优先级需要被改变,这种 where 条件用 wrapper 设计来实现很繁索,不如直接 sql 来得爽快,你可以试着用 wrapper 用法来表达上面的 where 条件
5:最终还是需要将 wrapper 实现翻译成 sql, 这个翻译的过程容易出 bug,对于嵌套 sql 复杂度急剧升级,例如,下面的 sql 你可以试着来用 wrapper 来表达一下: select * from t1 where id in ( select id from t2 where x = a and y = b) inner join t3 on t1.tid = t3.tid 无论是用户使用 warpper 的 API,还是你将 wrapper 翻译成 sql ,都很麻烦,sql 嵌套一下,where 来点 优先级与嵌套,复杂度将指数组上升
6:从 API 的使用上,wrapper 并不比 sql 直观,代码量甚至比 sql 要多,以下是对比: Db.find("select * from t whre x=a and y=b or z=c"); Db.select("*").from("t").where("x", a).and("y", b).or("z", c).find(); wrapper 用法只带来一点虚幻的安全感,而且这种安全感只对那些 sql 功底不过关的同学有吸引力