본문 바로가기
JAVA/MyBatis

mybatis - <select>의 속성 / keyProperty / sql문에 null허용법

by 설총이 2018. 9. 4.

- SQL Map XML 파일 :: SQL을 작성하는데 집중하도록 만들어졌다.


resultMap - 데이터베이스 결과데이터를 객체에 로드하는 방법을 정의하는 요소



- <select></select>


select태그의 속성들


id=”selectPerson” 

parameterType=”int” 

parameterMap=”deprecated” 

resultType=”hashmap” 

resultMap=”personResultMap” 

flushCache=”false” 

useCache=”true” 

timeout=”10000” 

fetchSize=”256” 

statementType=”PREPARED” 

resultSetType=”FORWARD_ONLY”



이 중에 밑에 세가지가 주로쓰인다 기억 !


resultType="hashmap"

parameterType="int"

resultMap = "personResultMap" 

parameterMap – 비권장됨! 예전에 파라미터를 매핑하기 위해 사용되었으나 현재는 사용하지 않음


parameterType으로 받아올 데이터가 여러개라면 DTO나 Map,

한개라면 기본형타입.




- insert에서만 사용가능한 keyProperty



1
2
3
4
5
6
7
8
9
10
11
12
<insert id="insertAuthor" parameterType="domain.blog.Author"
    <selectKey keyProperty="id" resultType="int" order="BEFORE"
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
     </selectKey
 
    insert into Author 
    (id, username, password, email,bio,
favourite_section) 
    values (#{id}, #{username}, #{password}, #{email}, #{bio}, 
    #{favouriteSection,jdbcType=VARCHAR}
    ) 
</insert>
 
cs



id값에만 랜덤 값을 넣어주고싶다면 먼저 selectKey로 값을 가져와 그 값을 #{id}로 넣을 수 있다.

<selectKey>의 속성에 order="before"를 걸면 sql문을 실행하기 전에 먼저 실행하겠다는 의미가 된다.



- mybatis에서의 sql문에 null 허용법


mybatis 안의 태그내에서 sql문에 들어오는 #{ } 값이 누락되면 null허용이 안되는것이 디폴트값으로 되어있다.

#{ } 값이 없이 실행을 하면 DB로 입력할수 없다고 에러 처리가 되버린다. 

그러나 데이터베이스에서는 null값이 들어가는 상황(NULLABLE)도 있기때문에

NULL 처리를 하고싶다면 mybatis내에서 따로 '명시' 해 주어야한다.


우리가 데이터베이스에 입력이안되는부분은 null값으로 입력해주고싶다면


#{프로퍼티명, jdbcType =VARCHAR} => null값 허용

#{프로퍼티명, jdbcType =NUMBER} => null값 허용


이런식으로 명시해주어야한다.

1. 주의사항1 :: jdbcType에 오는 값은 반드시 대문자로 입력해주어야한다.

2. 주의사항2 :: VARCHAR2는 존재하지않는다. (VARCHAR2 타입의 컬럼이면 그냥 VARCHAR로 사용한다)



'JAVA > MyBatis' 카테고리의 다른 글

mybatis - 동적SQL(if / choose / where / set / foreach)  (0) 2018.09.04
mybatis 개념/순서  (0) 2018.09.04