➰ 마이바티스 DML 태그에서 사용하는 매개변수 값 불러오는 방법
<select>, <insert>, <update>, <delete> 태그에서 SQL 코드에 전달 파라미터를 적용하는 방법
기본 데이터타입은 변수에 담긴 값을 불러옴
참조형 타입은 getter에 해당하는 메소드를 호출
Map타입은 .get(매개변수명) 메소드를 호출
#{매개변수명 }
매개변수의 데이터타입을 판단해서 처리
문자열 타입 데이터라면 ''를 앞뒤로 붙여줌
숫자 타입 데이터라면 ''를 붙이지 않음
${매개변수명 }
매개변수의 데이터타입을 판단하지 않고 처리함
어떤 타입이든지 ''를 붙이지 않음
➰ 마이바티스에서 정의된 자바 데이터타입에 대한 키워드(별칭)
- 매퍼XML에서 resultType이나 parameterType에서 특정 자바 데이터타입을 표현할 때 사용할 수 있도록 정의되어있는 키워드들임
org.apache.ibatis.type.TypeAliasRegistry 클래스에 명시되어있음
| 키워드 | 자바타입 |
|---|
| string | java.lang.String |
| date | java.util.Date |
| map | java.util.Map |
| hashmap | java.util.HashMap |
| list | java.util.List |
| arraylist | java.util.ArrayList |
| ResultSet | java.sql.ResultSet |
| |
| int | java.lang.Integer(Wrapper 클래스) |
| integer | java.lang.Integer |
| _int | int(기본 데이터타입) |
| _integer | int |
| int[] | Integer[] |
| _int | int[] |
✔ byte, short, long, float, double, boolean도 int와 같은 형태로 제공됨
➡ _를 붙이면 기본 타입 / _를 안붙이면 참조형 타입
➰ 마이바티스 <sql>, <include> 태그
- SQL 구문의 재사용성을 높이기 위해 Mapper XML에서 사용하는 태그
- 반복적으로 사용되는 SQL 구문을
<sql>태그에 저장하여 사용
- DML태그 또는 다른
<sql>태그에서 <include>태그를 이용하여 저장된 구문을 불러옴
<sql>태그를 <include>로 적용한 DML구문들이 다 함께 <sql>태그 구문에 영향을 받음
- 한쪽 코드(기능)만 구문을 변경하려고하면 오히려 수정사항이 많아질 수 있음
✔ <sql>태그의 이름을 나타내는 id 속성은 반드시 작성해야 함
➰ CDATA태그, Character DATA
<![CDATA[
태그 기호를 포함하는 텍스트
]]>
- XML문서에서 태그 문법 기호(<, >, &)를 단순 문자로 사용하고 싶을 때 적용
- 태그를 표현하는 기호를 마이바티스 매퍼 XML파일에서 SQL코드로 사용하면 XML문법으로 인식하는 경우가 있어 오류가 발생
- CDATA태그를 이용하여 매퍼 태그 문법과 SQL문법을 분리시킬 수 있음
➰ <selectKey>태그
- 마이바티스 Mapper의
<insert> DML태그 안에서 사용하는 태그 👉🏻 <update>에서도 사용가능하지만 insert에서만 쓸 것
- 주로 PK값을 생성할 때 사용
- selectKey에서 생성된 PK값을 자바코드로 되돌려 줄 수 있음
- 자동증가 생성키(Auto Increment 기능)를 제공하지 않는 데이터베이스에서 사용할 수 있도록 제공되는 태그 👉🏻 오라클 DB는 Auto Increment 기능이 없음
➰ <selectKey> 태그의 속성
- order
- before : insert쿼리 수행 전에 selectKey가 동작
- after : insert쿼리 수행 후에 selectKey가 동작
- resultType
- selectKey로 조회한 결과값의 데이터타입을 명시함
- 자바타입으로 작성하면 됨
- int | String
- keyProperty
- 조회 결과값을 저장할 프로퍼티명을 지정
- parameterType에 지정된 DTO의 멤버 필드명을 작성
- statementType
- SQL 코드가 실행될 방식을 지정
- Statement, Prepared, Callable 중 선택해서 작성 👉🏻 기본값은 Prepared (PreparedStatement)
🔍 쿼리 수행 태그
➰ DML 태그
<select>, <insert>, <update>, <delete>
- 수행하려는 SQL쿼리에 맞게 태그를 골라 작성
- SQL쿼리랑 태그 이름이 맞지 않아도 실행됨
➡ 맞춰서 작성하는 것이 좋음
➡ 사용할 수 있는 기능에 제약이 발생
➰ 공통 속성
- id
매퍼 파일(XML)에서 유일한 값으로 설정
네임스페이스(namespace) 내에서 식별값으로 사용됨
DAO인터페이스의 추상메소드 이름과 같은 이름으로 작성
- parameterType
SQL 쿼리를 수행할 때 필요한 파라미터(전달값)의 데이터타입
마이바티스의 예약 키워드를 사용하려 적용함
DTO 클래스는 패키지까지 포함한 풀네임으로 사용함
- parameterMap 👉🏻 사용되지 않음
- flushCache
SQL 구문을 사용할 때마다 '2nd 레벨 캐시'를 지울지 설정함
true로 지정하면 캐시를 삭제함 👉🏻 기본값 : false
- timeout
데이터베이스의 처리결과를 기다리는 최대 시간을 설정(초 단위로 숫자로 설정)
- statementType
SQL 쿼리를 수행하는 방식에 대한 설정
Statement, Prepared, Callable 중 하나로 적용
Prepared가 기본값
Callable은 PL/SQL 사용할 때 적용
➰ <select> 태그의 전용 속성
- resultType
- SELECT 쿼리의 수행결과(ResultSet)를 처리할 자바 데이터타입을 설정
- 적용한 데이터타입으로 결과데이터를 변환함
- DTO객체의 풀네임, 예약된 키워드로 데이터타입을 명시
- TypeAlias를 적용할 수 있음
- resultMap
<resultMap>태그를 이용하여 생성한 id속성값을 적용할 수 있음
- resultType 속성을 대신하여 사용
- useCache
- SELECT 구문의 결과를 생성할 때 2nd 레벨 캐시에 적용할 것인지 설정 👉🏻 기본값은 true
- fetchSize
- SELECT 구문의 조회 결과를 한번에 가져올 크기를 설정함
✔ 대용량 조회 데이터가 필요하면 1,000개 정도를 설정하는 편
- resultSetType
- 조회 결과값을 읽어들이는 동작을 설정
- DBMS의 SQL 커서(Cursor)의 동작 방식을 설정
- FORWARD_ONLY : 커서가 앞쪽(다음 데이터)으로만 이동
- SCROLL_INSENSITIVE : 커서가 뒤쪽(이전 데이터)으로도 이동
- SCROLL_SENSITIVE : 커서가 뒤쪽(이전 데이터)으로도 이동
- 데이터의 변화(변경)에 민감하게 반응
- 조회 결과를 읽는 도중 이전 데이터의 변화가 발생하면 다시 돌아가서 갱신함
✔ 오라클 DBMS는 SCROLL_SENSITIVE를 허용하지 않음__
🔍 마이바티스의 내장 캐시(Cache)
2가지 내장 캐시를 사용
1. Local Session Cache (로컬 세션 캐시)
SqlSession 객체마다 가지고 있는 캐시
DBMS의 연결마다 하나씩 생성됨
✔ 개발자가 임의로 기능을 해제할 수 없음
- Second Level Cache (2nd 레벨 캐시)
Mapper에 연결된 namespace마다 존재하는 캐시
DAO마다 하나씩 연결되어 사용됨
SQL 구문을 수행할 때마다 활용됨
🔍 마이바티스 동적 SQL 쿼리, Dynamic SQL
동적으로 변화되는 SQL쿼리를 작성할 수 있도록 지원하는 마이바티스 태그들
- DML 수행태그 안에서 사용할 수 있음
<if>, <choose>, <trim>, <foreach> 태그가 제공됨
➰ <if> 태그
test 속성을 이용하여 조건문을 적용
조건문 결과에 따라 SQL 구문의 추가 여부가 결정된
test 속성의 값을 연산결과가 "true" 또는 "false"가 되도록 작성