`

ibatis通过重用sql

    博客分类:
  • ORM
阅读更多

当我们写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上面,否则查询不到。我用的时候就遇到了这个问题。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics