IBatis动态查询帮助

时间:2010-06-25 17:02:58

标签: sql dynamic ibatis

我有一个名为“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>

2 个答案:

答案 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>