[Mybatis] DB컬럼과 Dto 자동 매핑 설정

네이버 블로그에서 2019. 1. 10. 18:48에 작성했던 글 옮김

resultMap으로 수동 매핑하지 말고 자동 매핑 설정하는 법~

1. 설정 파일들을 만들어준다!!!(spring mvc project)

 

2. datasource-context.xml

- maridDB 사용

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.mariadb.jdbc.Driver" />
        <property name="url" value="jdbc:mariadb://127.0.0.1:3306/study" />
        <property name="username" value="아이디" />
        <property name="password" value="비밀번호" />
    </bean>
</beans>

 

3. mapper-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- mybatis sql session template -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="/WEB-INF/sqlmap/mappers/*Mapper.xml"/>
        <property name="configLocation" value="/WEB-INF/sqlmap/mybatis-config.xml"/>
    </bean>

    <!-- ========================= sqlMapClientTemplate DEFINITIONS ======================== -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"  destroy-method="clearCache">
        <constructor-arg index="0">
            <bean class="org.mybatis.spring.SqlSessionFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <property name="mapperLocations" value="/WEB-INF/sqlmap/mappers/*Mapper.xml"/>
                <property name="configLocation" value="/WEB-INF/sqlmap/mybatis-config.xml"/>
            </bean>
        </constructor-arg>
    </bean>

    <!-- mybatis mapper auto scanning -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.study.first.Dao"/>
    </bean>

 

4. mybatis-config

mapUnderscoreToCamelCase 이 부분이 db 컬럼명 ex)dept_no 를 java camel 방식인 deptNo로 자동으로 변환 매핑해준다!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
          <setting name="cacheEnabled" value="true"/>                                        <!-- mybatis cache 사용여부 -->
          <setting name="lazyLoadingEnabled" value="true"/>                                <!-- 지연로딩 사용여부 -->
          <setting name="multipleResultSetsEnabled" value="true"/>                        <!-- 한 개의 구문에서 여러 개의 ResultSet을 허용할지 여부 -->
          <setting name="useColumnLabel" value="true"/>                                    <!-- 컬럼명 대신 컬럼 라벨을 사용 -->
          <setting name="useGeneratedKeys" value="false"/>                                <!-- 생성키에 대한 JDBC 지원 허용 여부 -->
          <setting name="autoMappingBehavior" value="PARTIAL"/>                            <!-- mybatis가 컬럼을 필드/프로퍼티에 자동으로 매핑할지와 방법에 대한 명시(PARTIAL은 중첩되지 않은 것들을 매핑 -->
          <setting name="defaultExecutorType" value="SIMPLE"/>                            <!-- 디폴트 Executor 설정(SIMPLE은 특별히 동작하는 것은 업음) -->
          <setting name="defaultStatementTimeout" value="10"/>                            <!-- DB 응답 타임아웃 설정 -->
          <setting name="safeRowBoundsEnabled" value="false"/>                            <!-- 중첩구문내 RowBound 사용 허용여부 -->
          <setting name="mapUnderscoreToCamelCase" value="true"/>                            <!-- 전통적 DB 컴럼명을 JAVA의 Camel표기법으로 자동 매핑 설정 -->
          <setting name="localCacheScope" value="SESSION"/>                                <!-- 로컬캐시 사용여부(SESSION: 세션을 사용해서 모든쿼리를 캐시) -->
          <setting name="jdbcTypeForNull" value="NULL"/>                                    <!-- mybatis로 넘어오는 parameter가 null인 경우, jdbcType을 Setting -->
          <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>    <!-- 지연로딩을 야기하는 객체의 메소드를 명시 -->
          <setting name="callSettersOnNulls" value="true"/>                                <!-- 가져온 값이 null일때 setter나 맵의 put 메소드를 호출할지를 명시 (false일경우, null인 field는 제거되어 나타남 : default는 false -->
    </settings>
</configuration>

 

5. web.xml

web.xml 파일에서 *-context.xml 파일들을 읽게 설정을 바꿔준다

contextConfigLocation 이 부분 변경

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/*-context.xml</param-value>
</context-param>

 

6. mapper 설정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.first.Dao.FirstDao">
    <select id="selectlist"  resultType="com.study.first.Dto.FirstDto">
        select  dept_no
              , dept_name
         from   dept
    </select>
</mapper>

 

7. dto

private int deptNo;
private String deptName;

이러면 resultMap으로 설정 안해줘도 매핑이 된다~

물론 당연히 언더바표기법(DB 컬럼 표기법) 에서 카멜 표기법(java dto 변수 표기법)으로만 된다


<참고 블로그 >

https://m.blog.naver.com/userspace/220835393572

http://blog.jin3260.com/12?category=586873