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)
stringString
dateDate
mapMap
hashmapHashMap
listList
arraylistArrayList
decimalBigDecimal
bigdecimalBigDecimal
bigintegerBigInteger
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
_byte[]byte[]
_long[]long[]
_short[]short[]
_int[]int[]
_integer[]int[]
_double[]double[]
_float[]float[]
_boolean[]boolean[]
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
byte[]Byte[]
long[]Long[]
short[]Short[]
int[]Integer[]
integer[]Integer[]
double[]Double[]
float[]Float[]
boolean[]Boolean[]
objectObject
date[]Date[]
decimal[]BigDecimal[]
bigdecimal[]BigDecimal[]
biginteger[]BigInteger[]
object[]Object[]
collectionCollection
iteratorIterator
ResultSetResultSet

 

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"

  • 즉시로딩

스프링특성상 개체지향적으로인해 개체가 매우 커지게되면 사용하지않는개체까지 조회 할수있다 이때 지연로딩을 통해 성능을 개선한다


참고자료