framework/spring
MyBatis Mapper 설정하기
datajoy
2020. 5. 21. 22:19
select
<select id="selectData" parameterType="map" resultType="map" fetchSize="5000" useCache=true> </select>
useCache=true/false
- 디폴트값 true
- 디비값을 가져올 때, 캐싱되어서 중간에 디비 값이 변경된다면 변경된 정보를 가져오지 못하는 문제가 발생한다. (물론 속도를 위해 캐시처리가 중요하면 해당 포스트는 패스)
fetchSize
- 디폴트값 10.
- DB로 부터 결과값을 가져오는 row 수.
- 5000건을 조회 할 경우, 디폴트값으로 설정되어있으면 500번 DB를 호출하여 가져옴.
resultType
- 설정확인
더보기
별칭(alias) | |
string | String |
date | Date |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
decimal | BigDecimal |
bigdecimal | BigDecimal |
biginteger | BigInteger |
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
_byte[] | byte[] |
_long[] | long[] |
_short[] | short[] |
_int[] | int[] |
_integer[] | int[] |
_double[] | double[] |
_float[] | float[] |
_boolean[] | boolean[] |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
byte[] | Byte[] |
long[] | Long[] |
short[] | Short[] |
int[] | Integer[] |
integer[] | Integer[] |
double[] | Double[] |
float[] | Float[] |
boolean[] | Boolean[] |
object | Object |
date[] | Date[] |
decimal[] | BigDecimal[] |
bigdecimal[] | BigDecimal[] |
biginteger[] | BigInteger[] |
object[] | Object[] |
collection | Collection |
iterator | Iterator |
ResultSet | ResultSet |
insert & update & delete
<insert id="insertAuthor"> <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>
keyProperty
ResultMap
Nested select
- 1번 조회 시 select 구문을 통해 다른 select쿼리의 결과를 가져와서 맵핑한다.
- 각 테이블별로 독립적으로 Mapper를 구현하고 resultMap을 통해 관계를 맺어주어 여기저기 Join으로 인한 테이블을 컬럼변경 시 관리포인트를 줄일 수 있다.
- N+1문제로 성능저하를 발생시키기 때문에 사용을 지양.
Nested results
- Nested select의 N+1문제를 해결하며 각 테이블 간에 Join을 통해 중복된데이터를 제거하므로써 객체간의 관계를 표현할 수 있다.
- Mapper에서 Join을 통해 테이블 간의 관계를 설정하기 때문에 중복 테이블 선언으로 인해 Mapper 마다 쿼리가 매우 무거워지며 컬럼이 변경/추가 될 경우 관리포인트가 많아지게 된다.
accosiation & collection
fetchType="lasy"
- 지연로딩.
- 불필요한정보를 사전에 로드하는 것을 방지하여 성능을 향상시킴.
fetchType="easer"
- 즉시로딩
스프링특성상 개체지향적으로인해 개체가 매우 커지게되면 사용하지않는개체까지 조회 할수있다 이때 지연로딩을 통해 성능을 개선한다
참고자료