论坛首页 Java企业应用论坛

iBATIS如何复用SQL片段(翻译)

浏览 20344 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-16  
早就有这个功能了。而且用起来也非常方便。
0 请登录后投票
   发表时间:2006-12-21  
现在有一个问题:如果要取其他namespace里的SQL,好象不能指定namespace,就象这样会报错,请问谁知道怎么解决?

<sqlMap namespace="common">
  <sql id="selectItem_fragment">      
    FROM items       
    WHERE parentid = 6      
  </sql>
</sqlMap>

<sqlMap namespace="test">      
  <select id="selectItems" resultClass="Item">      
    SELECT id, name       
    错误 <include refid="common.selectItem_fragment"/> 
    正确 <include refid="selectItem_fragment"/>           
  </select>
</sqlMap>

0 请登录后投票
   发表时间:2006-12-21  
在sqlmap-config中配置useStatementNamespaces="true"就可以了
0 请登录后投票
   发表时间:2006-12-21  
sinokaka 写道
在sqlmap-config中配置useStatementNamespaces="true"就可以了


原先没看到这一块,谢谢了!
0 请登录后投票
   发表时间:2006-12-22  
真的是很方便的  在实际中
至于说例子  好像没有几个例子是有意义的  主要就是用最简单的方式让别人明白怎么用就行了
0 请登录后投票
   发表时间:2007-01-29  
<include refid="selectItem_fragment"/>     

在这个include里面可不可以放变量,从程序外面传进去
0 请登录后投票
   发表时间:2007-03-21  
我感觉挺有用的,看我的代码
xml 代码
  1. <statement id="search" resultMap="infoResult">  
  2.         SELECT    
  3.             lnid,   
  4.             tpye,   
  5.             dsc,   
  6.             pnid,   
  7.         FROM F48100    
  8.         <include refid="Dy_SC"/>  
  9.         ORDER BY bcdat DESC   
  10.     </statement>  

 使用的时候include就OK了,如下

xml 代码
  1.     <sql id="Dy_SC">  
  2.         <dynamic prepend="WHERE">  
  3.             <isNotNull prepend="AND" property="pnid">  
  4.                 pnid = #pnid#   
  5.             </isNotNull>  
  6.             <isNotNull prepend="AND" property="dsc">  
  7.                 dsc like #dsc#   
  8.             </isNotNull>  
  9.         </dynamic>  
  10.     </sql>  

 

 
0 请登录后投票
   发表时间:2007-05-20  
测试了一下,刚开始没成功,说找不到要include的sql,后来发现我要include的sql放在了xml文件的最后,将他移到最前面就没问题了,所以大家要注意放置的顺序。
0 请登录后投票
   发表时间:2007-05-21  
谁说没用,我们现在就在用这种方法来做记录总数与记录明细的查询条件,节省了不少代码
0 请登录后投票
   发表时间:2007-05-21  
节省代码与提高代码可读性也是把双刃剑,
如果一个xml很大或者id不在一个配置中,你要复用这个id,查找也是一种成本.
并且,好像嵌套做得不好!

比如:

select * from (XX) where rownum <= 10

这里的XX到底是放include里还是select里?
一般XX是会变的,肯定是写在select里对应一个ibatis dao方法,那么include就难做了.
它不能传参数,不能嵌套.

比较丑陋的,就是 select * from ( 定义为一个include
而 ) where rownum <= 10定义为另一个include
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics