浏览 12126 次
锁定老帖子 主题:嵌套动态映射的使用方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-18
完整的情况是 where xxxx and(a=? or b=? or c=?) 其中and(a=? or b=? or c=?)大家有什么比较好的实现方法.共享出来. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2006-12-25
and(a=? or b=? or c=?)
根本就没有实现.你做的是最基础的映射. |
|
返回顶楼 | |
发表时间: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. 不知这会说得够不够清楚!!!! |
|
返回顶楼 | |
发表时间: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> 不知道是否有其他更加好的解决方法. |
|
返回顶楼 | |
发表时间:2007-01-27
有此同感,大部分时候要加上1=1条件
不知到iBatis3.0中有没有好的解决方法 |
|
返回顶楼 | |