[mybatis] 매퍼설정

Published: by Creative Commons Licence

참조

마이바티스 공식

마이바티스란?

자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 어노테이션을 사용하여 저장 프로시저나 SQL문으로 객체를 연결시킨다. 마이바티스는 ibatis 3.0의 포크임. 버전이 다르지만 같은 식구란 뜻

마이바티스는 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크로 JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.

지속성 프레임워크(Persistence Framework)

지속성 프레임워크(Persistence Framework)는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다. 지속성 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동도 보장한다.

마이바티스 설정

메이븐에서 마이바티스를 받아 세팅하는듯…

properties

db 접속 정보 설정파일 config.properties

xxx.mysql.DriverClassName=net.sf.log4jdbc.DriverSpy
xxx.mysql.Url=jdbc:log4jdbc:mysql://128.00.0.000:3306/ourdb
xxx.mysql.UserName = ourdb
xxx.mysql.Password = 1234!

별도 properties 파일에 설정되어 있는 db 접속 정보값으로 대체하여 사용 할 수 있다. context-datasource.xml

<bean id="xxx.dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${xxx.mysql.DriverClassName}"/>
    <property name="url" value="${xxx.mysql.Url}"/>
    <property name="username" value="${xxx.mysql.UserName}"/>
    <property name="password" value="${xxx.mysql.Password}"/>
</bean>

sql 매핑 설정 context-mapper.xml

<bean id="xxx.sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="xxx.dataSource"/>
  <property name="configLocation" value="classpath:/egovframework/mapper/config/mapper-config.xml" />

  <property name="mapperLocations">
    <list>
      <value>classpath:/egovframework/mapper/com/**/*.xml</value>
    </list>
  </property>
</bean>

속성 로드 순서

properties 엘리먼트에 명시된 속성을 가장 먼저 읽는다.
properties 엘리먼트의 클래스패스 자원이나 url 속성으로 부터 로드된 속성을 두번째로 읽는다. 그래서 이미 읽은 값이 있다면 덮어쓴다.
마지막으로 메소드 파라미터로 전달된 속성을 읽는다. 앞서 로드된 값을 덮어쓴다.
그래서 가장 우선순위가 높은 속성은 메소드의 파라미터로 전달된 값이고 그 다음은 자원 및 url 속성이고 마지막은 properties 엘리먼트에 명시된 값이다.

settings

런타임시 마이바티스의 행위를 조정하기 위한 세팅값 더 많은 값들은 공식문서 참조

egovframework/mapper/config/mapper-config.xml

<settings>
  <setting name="mapUnderscoreToCamelCase" value="true"></setting>
  <setting name="jdbcTypeForNull" value="VARCHAR"></setting>
  <setting name="logImpl" value="LOG4J2"/>
</settings>

typeAliases

자바타입에 대한 별칭

 <select id="getInfo" parameterType="string" resultType="long">
별칭 매핑된 타입
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

typeHandlers

마이바티스가 PrepareStatement 파라미터를 설정하고 ResultSet에서 값을 가져올때마다 TypeHandler는 적절한 자바 타입의 값을 가져오기 위해 사용된다. 아래에 명시되지 않은 타입은 사용자가 따로 정의하여 사용 할 수 있다.

타입 핸들러 자바 타입 JDBC 타입
BooleanTypeHandler java.lang.Boolean, boolean 어떤 호환가능한 BOOLEAN
ByteTypeHandler java.lang.Byte, byte 어떤 호환가능한 NUMERIC 또는 BYTE
ShortTypeHandler java.lang.Short, short 어떤 호환가능한 NUMERIC 또는 SMALLINT
IntegerTypeHandler java.lang.Integer, int 어떤 호환가능한 NUMERIC 또는 INTEGER
LongTypeHandler java.lang.Long, long 어떤 호환가능한 NUMERIC 또는 BIGINT
FloatTypeHandler java.lang.Float, float 어떤 호환가능한 NUMERIC 또는 FLOAT
DoubleTypeHandler java.lang.Double, double 어떤 호환가능한 NUMERIC 또는 DOUBLE
BigDecimalTypeHandler java.math.BigDecimal 어떤 호환가능한 NUMERIC 또는 DECIMAL
StringTypeHandler java.lang.String CHAR, VARCHAR
ClobReaderTypeHandler java.io.Reader -
ClobTypeHandler java.lang.String CLOB, LONGVARCHAR
NStringTypeHandler java.lang.String NVARCHAR, NCHAR
NClobTypeHandler java.lang.String NCLOB
BlobInputStreamTypeHandler java.io.InputStream -
ByteArrayTypeHandler byte[] 어떤 호환가능한 byte 스트림 타입
BlobTypeHandler byte[] BLOB, LONGVARBINARY
DateTypeHandler java.util.Date TIMESTAMP
DateOnlyTypeHandler java.util.Date DATE
TimeOnlyTypeHandler java.util.Date TIME
SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP
SqlDateTypeHandler java.sql.Date DATE
SqlTimeTypeHandler java.sql.Time TIME
ObjectTypeHandler Any OTHER, 또는 명시하지 않는
EnumTypeHandler Enumeration Type VARCHAR – 문자열 호환타입.
EnumOrdinalTypeHandler 열거형(Enumeration) 타입 코드자체가 아니라 위치를 저장할수 있는 NUMERIC 또는 DOUBLE와 호환가능한 타입
SqlxmlTypeHandler java.lang.String SQLXML
InstantTypeHandler java.time.Instant TIMESTAMP
LocalDateTimeTypeHandler java.time.LocalDateTime TIMESTAMP
LocalDateTypeHandler java.time.LocalDate DATE
LocalTimeTypeHandler java.time.LocalTime TIME
OffsetDateTimeTypeHandler java.time.OffsetDateTime TIMESTAMP
OffsetTimeTypeHandler java.time.OffsetTime TIME
ZonedDateTimeTypeHandler java.time.ZonedDateTime TIMESTAMP
YearTypeHandler java.time.Year INTEGER
MonthTypeHandler java.time.Month INTEGER
YearMonthTypeHandler java.time.YearMonth VARCHAR or LONGVARCHAR
JapaneseDateTypeHandler java.time.chrono.JapaneseDate DATE

objectFactory

마이바티스가 결과 객체의 인스턴스를 만들기 위해 사용한다.

plugins

인터셉터를 위한 기능을 추가할 수 있다. ?

environments

여러 개의 스키마의 DBMS 제품을 사용하거나 개발, 테스트, 리얼환경을 위한 별도 설정을 할 수 있다. 중요한 점은 데이터베이스별로 하나의 SqlSessionFactory를 사용할 수 있다는 점이다.