iBATIS.net复用sql语句片段

这一阶段累坏哥哥我鸟,偶很久没有感觉这么“充实”过了。尤其是哼唧哼唧地写了不少sql语句,好邪恶啊.偶现在所干的活,通常都是这样的:在一个拼接sql的xml文件内,繁琐的列名和别名,眼花缭乱的动态条件拼接......如果这部分工作都交给orm自动去做该多好啊。好了,言归正传。用iBatis.net开发的时候,sql语句通常都会有重复的片段,比如,我们现在要select一个表的某些列,但是查询条件不同。如果一个select的statement拼接sql语句不能满足查询(这个还是很正常的),我们通常都会写两个甚至多个statement。这个时候select列名这种sql语句就会不可避免地出现重复。可能你会说复制粘贴不花时间,很快啊。但是,正像某些高人所讲的那样,复制粘贴是所有程序员的毒药(记不清楚原话了,大意。非常惭愧的是,笔者在实际的开发中复制粘贴了不少代码,虽说一干这种事我就条件反射地排斥,不过,适当地复制粘贴是不可避免地,谁让咱是程序员呢,呵呵)。我们肯定想到要用一种更好的方法解决重复的sql语句问题。没错,就是iBatis.net已经提供的复用sql片段功能,官方解释见这篇的3.3.3.1“Reusing SQL Fragments”。下面摘抄一下原文的一段查询的sql语句:

Code

说明:

1、sql和include标签
这个没什么好说的,就是iBatis的规范,都这么写。
2、注意点:
正像你看到的那样,sql标签组装的公用sql语句无法传递参数;分割公共sql语句也是一个技巧,看开发者的个人习惯,同样是查询条件,有人就喜欢放进公共部分,有人就喜欢拆分;命名也是门学问,公共sql语句的id如果在一个xml文件中出现了,其他的地方如果重名,可能因为配置原因给开发者带来不必要的麻烦。因为在运行时,iBatis可能会抛出异常并提升您已经存在一个相同的映射id,这是笔者开发中实际出现过的。
自从改用iBatis以后,也不知是喜是忧。之前比较熟练的一款orm,潇洒有余(几乎不用写sql和xml),但是灵活不足,这点必须承认。而iBatis确实非常灵活和方便,但是实际的开发情况往往物极必反,sql写了很多很多。在维护老系统的sq语句l时,发现自己现在写的那一坨也有点“乱棍打死老师傅”的趋势,哈哈。如果将来有人维护偶写的sql语句,要是累的挂了就算了,如果命硬还活着,在累的吐血的时候,千万表拍偶啊。

posted on 2009-11-21 18:56  JeffWong  阅读(1578)  评论(2编辑  收藏  举报