합쭈기 programming

[SQL Map] sqlmap 사용 방법 본문

Java/Spring

[SQL Map] sqlmap 사용 방법

innocent_k 2015. 7. 29. 12:10

쿼리 태그는 아래와 같다.


<select>

<insert>

<update>

<delete>


각 태그는 기본적으로 식별을 위한 id 속성을 갖는다. 중복 되지 않게 네이밍 하는게 중요하다. 

<select>를 할 경우 결과값을 받아올 필요가 있다. 

resultClass 또는 resultMap 속성을 사용해서 결과값을 받아온다. 


VO 맵핑을 명시적으로 하려면 resultMap을 사용하고 

귀찮다면 map클래스를 사용하자. 

보안상 문제가 될련지 모르겠지만 작은 기업에서 QA나 TA가 있는것도 아니고.. 

생산성이 중요하니 편하고 빠른게 좋다. 


나 같은 경우는 map으로 받아와서 VO에서 넣는 클래스를 짜버렸다. 


아래는 조건 태그들 

<isEqual> - property 값이 비교값과 같은지 체크

<isNotEqual> - property 값이 비교값과 같지 않은지 체크

<isGreaterThan> - property 값이 비교값 보다 큰지 체크

<isGreaterEqual> - property 값이 비교값과 크거나 같은지 체크

<isLessThan> - property 값이 비교값과 작은지 체크

<isPropertyAvailable> - property가 유효한지 체크

<isNotPropertyAvailable> - property가 유효하지 않은지 체크

<isNull> - property가 Null인지 체크

<isNotNull> - property가 Null이 아닌지 체크

<isEmpty> - Collection 사이즈가 0이거나 String이 ""인지 체크

<isNotEmpty> - Collection 사이즈가 0이거나 String이 ""이 아닌지 체크

<isParameterPresent> - parameter가 존재(not null)하는지 보기위해 체크.

<isNotParameterPresent> - parameter가 존재하지(null)않는지 보기위해 체크.

<iterate> - java.util.List 타입의 property 반복


쿼리 태그 사이사이에 필요에 따라 넣으면 된다. 

문제는 잘 사용하면 하나의 쿼리로 다양한 조작이 되는데 잘못 사용하면 뱅뱅 꼬여버린다. 

나는 Equal, Null 관련에서 많이 쓰고 나머지는 쿼리로 해결한다. 


쿼리에 조건절을 넣으면 안 먹거나 오류가 뜰 수 있으니 

<select>

<![CDATA[ 

... 쿼리 .. 

]]>

</select>

CDATA로 감싸주자. '='이나 'between'은 괜찮다. 


각각에 속성들이 있는데 (prepend, property , compareValue 등

prepend는 앞에 붙는 녀석으로 and', 'or' 등을 넣고

property는 변수이다. 

<isNotNull prepend="and" property="id">

id = #id#

</isNotNull>

요런식으로 쓴다. 


변수는 # 이나 $로 감싸주는데 

#으로 감싸면 변수를 대입하는 형식이고 (?, id)

$로 감싸면 쿼리에 직접 입력되는 방식이다. (select ... from.. like $keyword$ 

>> keyword = '%keyword%') 


// insert 후 마지막 id 가져오기 

<selectKey resultClass="map">

SELECT LAST_INSERT_ID() 

</selectKey>