ibatis 动态查询

如下语句:<isNotEmptyproperty="NAME"prepend="AND">A.NAME=#NAME#</isNotEmpty>若NAME不为空则执行A.N... 如下语句:
<isNotEmpty property="NAME" prepend="AND"> A.NAME=#NAME#</isNotEmpty>
若NAME不为空 则执行 A.NAME=#NAME#
请问这里的property可不可以有两个值
实现:若NAME1或NAME2不为空 则执行A.NAME=#NAME#
展开
 我来答
a313207120
2012-07-03
知道答主
回答量:17
采纳率:0%
帮助的人:2.6万
展开全部
<sql id="AgentUser.findPage.where">
<!-- ognl访问静态方法的表达式 为@class@method(args),以下为调用rapid中的Ognl.isNotEmpty()方法,还有其它方法如isNotBlank()可以使用,具体请查看Ognl类 -->
<where>
<if test="@Ognl@isNotEmpty(userId)">
AND USER_ID = #{userId}
</if>
<if test="@Ognl@isNotEmpty(userName)">
AND USER_NAME = #{userName}
</if>
<if test="@Ognl@isNotEmpty(userAccount)">
AND USER_ACCOUNT = #{userAccount}
</if>
<if test="@Ognl@isNotEmpty(userPasswd)">
AND USER_PASSWD = #{userPasswd}
</if>
<if test="@Ognl@isNotEmpty(userDept)">
AND USER_DEPT = #{userDept}
</if>
<if test="@Ognl@isNotEmpty(userCompany)">
AND USER_COMPANY = #{userCompany}
</if>
<if test="@Ognl@isNotEmpty(creator)">
AND CREATOR = #{creator}
</if>
<if test="@Ognl@isNotEmpty(createDateBegin)">
AND CREATE_DATE >= #{createDateBegin}
</if>
<if test="@Ognl@isNotEmpty(createDateEnd)">
AND CREATE_DATE <= #{createDateEnd}
</if>
<if test="@Ognl@isNotEmpty(agentUserId)">
AND AGENT_USER_ID = #{agentUserId}
</if>
</where>
</sql>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伯猫说
推荐于2016-04-09 · TA获得超过232个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:67.4万
展开全部
何必把简单的东西搞复杂化呢?简单有效的方法是最有用的。
比如你的问题,完全可以在传入参数NAME之前判断好NAME1和NAME2哪一个有值,把有值的那个封装在map里面穿进去就行了,放到sql语句里面做判断本身就不是什么好的写法,增加逻辑混乱性和后期维护极大的开销。
追问
前台有两个查询条件 TJRQQ(统计日期起),TJRQZ(统计日期止)。 
这两个值都需要传到后台。
只要其中一个不为空,在后台就需要
将sql
select * from a
改为
select * from a,b where a.id = b.id and b.tjrqq=#TJRQQ# b.tjrqz=#TJRQZ#
我现在的处理方法是,在前台强制,只要其中一个不为空,则另一个也不能为空。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianshunq
2012-07-03
知道答主
回答量:21
采纳率:0%
帮助的人:9.7万
展开全部
<isNotEmpty prepend=" AND " property="NAME">
A.NAME = #NAME#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="NAME1">
A.NAME = #NAME1#
</isNotEmpty>
<isNotEmpty prepend=" AND " property="NAME2">
A.NAME = #NAME2#
</isNotEmpty>
追问
这个办法我想过 但是由于表也是动态的 写成两句的话会报错
select * from A

B

WHERE A.ID=B.ID

A.NAME=#NAME#

大概就是这个意思
(字数限制 其它见评论)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式