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"
- 즉시로딩
스프링특성상 개체지향적으로인해 개체가 매우 커지게되면 사용하지않는개체까지 조회 할수있다 이때 지연로딩을 통해 성능을 개선한다
참고자료
'framework > spring' 카테고리의 다른 글
| 스프링 구조 (0) | 2020.07.24 |
|---|---|
| 스프링 요청패킷 로깅하기 (0) | 2020.07.24 |
| DBCP 설정하기 (0) | 2020.05.21 |
| MyBatis Mapper를 설계해보자(N+1문제 해결하기) (0) | 2020.05.21 |
| 스프링 배포버전 가져오기 (0) | 2020.05.07 |