【问题标题】:IBatis dynamic query helpibatis动态查询帮助
【发布时间】:2011-03-08 09:18:54
【问题描述】:

我有一个名为“用户”的表,其中包含以下列 用户名、姓名、性别、部门、经理...

我想进行此查询,但遇到了 2 个问题
1. 在第 4 行是导致问题,这是由于 XML。我需要使用,但即使经过一些排列也无法让事情顺利进行。
2. check department = 'engineering' 只有在通过的map包含department时才需要做。所以这需要是动态的。

有人能说说我如何在 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>

【问题讨论】:

    标签: sql dynamic ibatis


    【解决方案1】:

    我会这样尝试:

    <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”的语法更正。祝你好运!

    【讨论】:

      【解决方案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>
      

      【讨论】:

      • 只需去掉第二个 中的“前置”即可。通过用 包围比较块,它会自动在每个匹配项前添加“AND”。
      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2011-07-19
      • 2011-04-28
      • 2011-02-01
      相关资源
      最近更新 更多