2010-06-25 3 views
1

나는 열을 사용자 ID, 이름, 성별, 부서, 관리자 ID를 다음과 같이 "사용자"라는 테이블이 .... iBatis를 동적 쿼리 도움

내가이 쿼리를하고 싶어하지만,이 문제
1을 가졌다 있습니다 . <>은 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

내가 iBatis를 2.3 – aadidasu

+0

을 사용하고있는 쿼리는 PostgreSQL의 – aadidasu

답변

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

+0

두 번째 에서 "앞자리"를 제거하십시오. 비교 블록을 으로 둘러싸면 각 일치 항목 앞에 자동으로 "AND"가 붙습니다. –

2

I는 다음과 같이 그것을 시도 할 것 :

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

"NULL IS"에서 "ISNULL"에서 구문 보정을 유의하시기 바랍니다. 행운을 빕니다!