我有一个名为“users”的表,其中包含以下列 用户ID,姓名,性别,部门,经理ID ....
我想做这个查询,但有2个问题
1.<>第4行引起了问题,这是由于XML造成的。我需要使用,但即使经过一些排列也无法使事情发生
2.只有传递的地图包含部门时,才需要检查部门='工程'。所以这需要是动态的。
有人可以写一下如何在Ibatis中完成这项工作。谢谢你的帮助!!!
select * from users
where userid=#userid#
and gender = 'm'
and (managerid ISNULL OR managerid <> #mgrid#)
and department = 'engineering'
我试过这个但是没有用......任何帮助??
<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap">
<![CDATA[
select * from users
where userid=#userid#
and gender = 'm'
and (managerid ISNULL OR managerid <> #mgrid#)
<dynamic>
<isNotEmpty property="mgrid">
( AND department = #mgrid# )
</isNotEmpty>
</dynamic>
]]>
</select>
答案 0 :(得分:2)
我会这样试试:
<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap">
<![CDATA[
select * from users
where userid=#userid#
and gender = 'm'
and (managerid IS NULL OR managerid <> #mgrid#)
]]>
<dynamic prepend="AND">
<isNotEmpty property="mgrid">
(department = #mgrid#)
</isNotEmpty>
</dynamic>
</select>
请注意从“ISNULL”到“IS NULL”的语法更正。祝你好运!
答案 1 :(得分:2)
感谢Cory的快速回复。你的建议确实很有效 进一步添加到同一个问题,如果我想在动态标签中有多个AND / OR,那么格式应该是什么?我试过这个但是没用(特别是当mgrid =“”)
再次感谢您的回复。
<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap">
<![CDATA[
select * from users
where userid=#userid#
and gender = 'm'
and (managerid IS NULL OR managerid <> #mgrid#)
]]>
<dynamic prepend="AND">
<isNotEmpty property="mgrid">
(department = #mgrid#)
</isNotEmpty>
<isNotEmpty property="uName" prepend="AND">
(username = #uName#)
</isNotEmpty>
</dynamic>
</select>