2010-06-25 53 views
1

我有一個名爲「用戶」與下面的列 用戶ID,姓名,性別,部門經理ID表....iBATIS的動態查詢幫助

我想做這個查詢但有2個問題
1第4行中的<>導致問題,這是由於XML。我需要使用,但即使在一些排列之後也無法使事情順利進行。
2.只有當傳遞的地圖包含部門時,才需要執行check department ='engineering'。所以這需要動態。

有人可以隨意塗抹我如何在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

我使用iBATIS 2.3 – aadidasu 2010-06-25 17:11:15

+0

查詢是一個針對PostgreSQL – aadidasu 2010-06-25 17:34:34

回答

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> 
+0

上面的查詢工作! – aadidasu 2010-06-26 00:59:38

+0

只需在第二個擺脫「前置」。通過將您的比較塊與相提並論,它會自動在每個比賽中加上「AND」。 – 2010-06-26 13:08:56

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」 語法修正。祝你好運!