当我们写SqlMap xml的时候,经常会碰到重复的SQL片段,例如where语句或者约束条件;iBATIS提供了一个强大的标签来复用这些重复片段,简单举例,我们想检索一些字段,并且想统计它们。
通常情况下,你会这样写:
<select id="selectCount" resultClass="int"> SELECT COUNT(*) AS total FROM items WHERE id = 6 and groupId = 4 select> <select id="selectOne" resultClass="Item"> SELECT id, name FROM items WHERE id = 6 and deleted= true select>
为了消除重复片段,我们使用【sql】和【include】标签。【sql】标签用来包含重复片段,【include】标签用来引入片段:
<sql id="dao_where_statement"> <dynamic prepend="where"> <isNotNull prepend="and" property="id"> id = #id# </isNotNull> <isNotNull prepend="and"> groupId = #groupId# </isNotNull> <isNotNull prepend="and" property="deleted"> DELETED = #deleted# </isNotNull> </dynamic> </sql>还可以通过isNotNull判断属性条件,这样就达到了where条件查询的重用
<select id="selectCount" parameterClass="int" resultClass="int"> SELECT COUNT(*) AS total from items <include refid="dao_where_statement"/> <select>
注意很重要的一点,要引用的sql标签一定要定义在select上面,否则查询不到。我用的时候就遇到了这个问题。
相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf