일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- apple
- css
- FIDO2
- OSX
- kmip
- 앨범북
- albumbook
- Nodejs
- SSL
- 앱리소스
- SWIFT
- openssl
- MYSQL
- 애플
- WebAuthn
- git
- 안드로이드
- appres
- Xcode
- SwiftUI
- MFA
- otpkey
- fido
- SSH
- 앱스토어
- Android
- MSYS2
- OTP
- 인증
- 2FA
- Today
- Total
인디노트
mybatis null test 본문
iBatis 에서 mybatis 로 바뀌면서 바뀐것들 중에 하나가 동적쿼리문에서 쓰는 태그들이다.
iBatis 에 있던 <isEqual/> <isNotEqual/> 요런 것들이
mybatis 에서는 <if test="xxx == 'a'"></if> <if test="xxx != 'a'"></if> 요렇게 대체할 수 있어서 쫌더 간결해 진것 같다.
그런데 test="" 요기에서 쓸수 있는 비교연산자들 중에는 null 인지 빈 공백인지 판단하던 <isEmpty/>, <isNotEmpty/> 를 대체할만한 비교연산자가 없었다.
null 인지 공백인지 mybatis 에서 판단하기 위해서는
<
if
test
=
"xxx == null or xxx == ''"
></
if
>
요렇게 쫏끔 번거롭게 쓸 수 밖에 없는것 같았다. 뭐 더 찾아보진 않았지만~
어째 다른 방법이 없나 쭉 찾아보니까~ 신기하게도 조건문에서 자바 클래스의 메소드를 호출해서 하는 방법이 있었다.
클래스를 하나 맨들고 거기에다 boolean 을 리턴해주는 static 메소드들을 뽓 맨들고 고것을 호출하는 방식이다.
내가 작성해본 클래스는 요렇다.
package
stove99.tistory.com;
import
java.lang.reflect.Array;
import
java.util.List;
import
java.util.Map;
public
class
MyComparator {
public
static
boolean
isEmpty(Object obj){
if
( obj
instanceof
String )
return
obj==
null
||
""
.equals(obj.toString().trim());
else
if
( obj
instanceof
List )
return
obj==
null
|| ((List)obj).isEmpty();
else
if
( obj
instanceof
Map )
return
obj==
null
|| ((Map)obj).isEmpty();
else
if
( obj
instanceof
Object[] )
return
obj==
null
|| Array.getLength(obj)==
0
;
else
return
obj==
null
;
}
public
static
boolean
isNotEmpty(String s){
return
!isEmpty(s);
}
}
죠렇게 맨든 클래스를 땡겨다 쓰는 mabatis sql xml 예제는 요렇다.
<
select
id
=
"testSQL"
parameterType
=
"map"
resultType
=
"hashmap"
>
SELECT * FROM TB_TEST
WHERE
1=1
<!-- @패키지.클래스명@호출할메소드(파라메터) -->
<
if
test
=
"@stove99.tistory.com.MyComparator@isEmpty(keyword)"
>
AND KEYWORD = #{keyword}
</
if
>
</
select
>
@패키지명.클래스@메소드 요렇게 호출해야 되기 때문에 패키지나 클래스명은 간단하게 명명하면 좋을것 같다.
뭐 쓰고보니 더 복잡해진것 같기도 하고 -_-
아무튼 딸랑 empty 체크하는 거에만 활용해서 그럴수도 있지만, 자바 메소드를 호출할수 있다는 것은 이것저것 활용할데가 많을것 같다.
출처: http://stove99.tistory.com/73 [스토브 훌로구]
'소스 팁 > HTML, Java Script, jQuery, CSS' 카테고리의 다른 글
JavaScript ES6 to ES5 - 바벨 (babel) (0) | 2019.10.17 |
---|---|
자바스크립트에서 strict mode를 사용해야 하는 이유 (0) | 2018.11.10 |
Javascript - 비밀번호 유효성 검사 (0) | 2017.04.02 |
CSS: 선택자(Selector) 이해 (0) | 2017.02.16 |
CSS 제대로 쓰기 (0) | 2017.02.16 |