动态sql语句xml 标签感觉有点过度设计
melin opened this issue · 3 comments
melin commented
blinkfox commented
@melin 动态 SQL 的本质就是 if/else
和 for
循环的逻辑,MyBatis 就是把这些做成了单独的 XML
标签,但是在实际项目中,复杂动态的 SQL 会写大量的 if/else
的相关代码,是过程式的编程方式,可读性和可复用性是比较差的。
而 Fenix 中的 XML 标签本质上是对 if/else
、for
这些过程式编程的进一步的封装,是具有 SQL 声明式的语义化的 XML
标签,可读写更强。你对比下你示例中的写法,是不是不能一眼看出来写的啥,而且很多地方都充斥着过程式的、扰乱视觉的 if/else
代码。
你想想,如果你要写一个 in
查询,你需要写一个 for
循环,手动处理前后括号、最后的逗号等,而通过 Fenix 只需要一个 <in />
标签即可,只需关注核心的查询字段和参数值即可。针对 between ... and
的区间范围查询,你还得用 4 个 if/else
分支判断左区间参数和右区间参数的都为空、都不为空、谁为空、谁不为空的情况,而 Fenix 中的 <between />
标签是具有这些边界处理和自动退化处理能力的。所以,在多条件复杂查询场景,用模版引擎的过程式编程写法,SQL 本身的可读性、易理解性、可复用性大大降低了。
另外,Fenix 中也支持你这种模板化的逻辑控制标签写法的,如果你的 SQL 确实不是字段的动态性的话,就可以使用这种写法,一般建议能用声明式、语义化的写法就使用声明式的写法。
melin commented