论坛首页 Java企业应用论坛

嵌套动态映射的使用方法

浏览 12126 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-18  
在动态映射的where部分.有如下嵌套的动态条件
完整的情况是
where xxxx and(a=? or b=? or c=?)

其中and(a=? or b=? or c=?)大家有什么比较好的实现方法.共享出来.
   发表时间:2006-12-20  
可以这样吧:

<resultMap   id="get-product-result"   class="com.paic.epass.cardcenter.dto.UserDTO">    
                <result   property="empo"   column="empo"/>  
                <result   property="um_id"   column="employee_id"/>                
                <result   property="status"   column="status"/>  
                <result   property="matchID"   column="match_id"/>  
                <result   property="operator"   column="create_by"/>  
                <result   property="createDate"   column="create_time"/>                    
            </resultMap>  
         
            <statement   id="selectRecord"   resultMap="get-product-result"   >  
                select   empo,employee_id,status,match_id,card_holder.create_by,card_holder.create_time   from   CARD_HOLDER,CARD    
                  <dynamic   prepend="where">    
                      <isNotEmpty   prepend="and"   property="empo">  
                        empo   =   #empo#    
                      </isNotEmpty>    
                       
                      <isNotEmpty   prepend="and"   property="um_id">  
                          employee_id   =   #um_id#      
                      </isNotEmpty>  
                       
                      <isNotEmpty   prepend="and"   property="status">  
                          status   =   #status#      
                      </isNotEmpty>  
                       
                      <isNotEmpty   prepend="and"   property="matchID">  
                          match_id   =   #matchID#      
                      </isNotEmpty>  
                           
                      <isNotEmpty   prepend="and"   property="operator">  
                          CARD_HOLDER.create_by   =   #operator#      
                      </isNotEmpty>                
                         
                  </dynamic>  
                      and   CARD_HOLDER.CARD_ID   =   CARD.ID   order   by   card_id   asc  
            </statement>
但是不知如何过滤NULL值更好点,比如 and create_time is not null
0 请登录后投票
   发表时间:2006-12-25  
and(a=? or b=? or c=?)
根本就没有实现.你做的是最基础的映射.
0 请登录后投票
   发表时间:2007-01-02  
<resultMap id="get-product-result" class="com.xx.xxx.xxxxx">
<result property="a" column="a"/>
<result property="b" column="b"/>
<result property="c" column="c"/>
</resultMap>

<statement id="selectRecord" resultMap="get-result" >
select a,b,c from table where xxx
<dynamic prepend="( ">
<isNotEmpty prepend="or" property="a">
a= #a#
</isNotEmpty>

<isNotEmpty prepend="or" property="b">
b = #b#
</isNotEmpty>

<isNotEmpty prepend="or" property="c">
c = #c#
</isNotEmpty>


</dynamic>
) order by XXX
</statement>


--isNotEmpty  是根据你的查询条件是否为空而动态增加的.
比如我们要查 xxx(a = '001' or b ='002' ) 就可以这样用:

XXX   xx = new XXX();
xx.setA ="001";
xx.setB ="002";

List result = xxxDao.getRecord(xx);

当然你的DOMAI XXX  的 c 默认为 null.

不知这会说得够不够清楚!!!!
0 请登录后投票
   发表时间:2007-01-09  
通常我们是使用
<dynamic prepend="where ">来做为where的表达式的起头.

如果写成
where xxx
<dynamic prepend="( ">

的方式

为了避免where 后面什么条件也没有的情况就需要加用
where 1=1
<dynamic prepend="( ">


这个我和的解决方法一样、感觉比较恶心、所以才提出这个问题.

dynamic不支持嵌套、如果支持.就可以用

<dynamic  prepend="where">
<isNotEmpty prepend="and" property="hehehaha">
hehehaha=#hehehaha#
</isNotEmpty>
<dynamic prepend="( ">
<isNotEmpty prepend="or" property="a">
a= #a#
</isNotEmpty>

<isNotEmpty prepend="or" property="b">
b = #b#
</isNotEmpty>

<isNotEmpty prepend="or" property="c">
c = #c#
</isNotEmpty>

</dynamic>
</dynamic>

不知道是否有其他更加好的解决方法.


0 请登录后投票
   发表时间:2007-01-27  
有此同感,大部分时候要加上1=1条件
不知到iBatis3.0中有没有好的解决方法
0 请登录后投票
论坛首页 Java企业应用版

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