ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MyBatis] 마이바티스란? 메이븐 프로젝트에서 마이바티스 설정하기
    JAVA 2022. 7. 24. 22:21

    MyBatis란?

     

    마이바티스는 자바 퍼시스턴스 프레임워크로, 자바의 관계형 데이터 베이스 프로그래밍을 보다 쉽게 도와준다. JDBC를 보다 편하게 사용하기 위해 개발되었고, SQL문을 코드로부터 분리할 수 있다는 장점이 있다.

     

    xml파일과 어노테이션을 사용한 인터페이스로 SQL쿼리를 실행할 수 있다.

     

    마이바티스를 사용하기 위해서는 dependency에 먼저 마이바티스를 추가해야 한다.

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>

     

    그리고 마이바티스 설정파일인 mybatis-config.xml 파일이 필요하다. 여기에 DB연결정보를 저장해두고, 만든 매퍼xml파일과 인터페이스의 경로를 지정한다. (설정파일에 해당 경로를 알려주지 않으면 마이바티스가 찾을 수 없기 때문)

     

    <?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>
    
      <environments default="development">
    
        <environment id="development">
          <transactionManager type="JDBC"/>
    
          <dataSource type="UNPOOLED">
            <!-- 드라이버스파이를 사용할 때 -->
            <property name="driver" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
            <property name="url" value="jdbc:log4jdbc:oracle:thin:<alias이름>?TNS_ADMIN=<전자지갑파일의 경로>"/>
    
            <property name="username" value="아이디"/>
            <property name="password" value="패스워드"/>
    
            <!-- <property name="defaultTransactionIsolationLevel" value="" /> -->
            <!-- <property name="defaultNetworkTimeout" value="1000" /> -->
            <property name="driver.encoding" value="utf8" />
          </dataSource>
        </environment>
    
    
        <environment id="production">
          <transactionManager type="JDBC"/>
    
          <dataSource type="POOLED">
            <property name="driver" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
            <property name="url" value="jdbc:log4jdbc:oracle:thin:<alias이름>?TNS_ADMIN=<전자지갑파일의 경로>"/>
    
            <property name="username" value="<아이디>"/>
            <property name="password" value="<패스워드>"/>
    
            <property name="poolMaximumActiveConnections" value="10" />
            <property name="poolMaximumIdleConnections" value="3" />
            <property name="poolTimeToWait" value="20000" />
            <property name="poolPingQuery" value="SELECT 1 FROM dual" />
            <property name="poolPingEnabled" value="true" />
            <property name="poolPingConnectionsNotUsedFor" value="60000" />
    
            <property name="driver.encoding" value="utf8" />
          </dataSource>
        </environment>
    
      </environments>

     

    environments 태그 안에 여러개의 environment를 등록할 수 있다. 환경설정을 등록해두고, 사용할 설정의 id값만 상단 default속성에 지정하면 지정한 환경으로 동작한다. DriverSpy는 기존 드라이버에서 좀더 상세한 로그를 찍어주는 드라이버다.

     

    개발단계에서는 dataSource의 타입을 UNPOOLED로, production단계에서는 POOLED로 설정했다.

    커넥션풀을 설정하면 최초 요청의 종료 후에도 pool에 연결을 저장해 요청이 올 때마다 pool에서 커넥션을 꺼내 재사용한다. Connection은 비용이 큰 자원객체이기 때문에 실 서비스 환경에서는 커넥션풀을 설정하는 것이 좋다.

     

    그 후, 작성한 매퍼파일들을 이 설정파일에 등록해야한다.

    mappers태그에 등록하는데, xml파일과 인터페이스의 등록방식이 다르다.

     

    <mappers>
        <mapper resource="BoardMapper.xml"/>
        <mapper resource="mappers/UserMapper.xml"/>
    
        <!-- 인터페이스 방식으로 적용된 매퍼인터페이스를 등록할 땐 class속성 사용 -->
        <!-- <mapper class="org.zerock.myapp.mapper.BoardMapper"/>
        <mapper class="org.zerock.myapp.mapper.UserMapper"/> -->
    
        <!-- 매퍼로 패키지를 입력하면 해당 패키지 내의 모든 파일을 스캔함 -->
        <package name="org.zerock.myapp.mapper" />
    </mappers>

    xml 파일을 등록할 땐 resource속성에 경로를 지정하고,

    인터페이스를 등록할 땐 class속성에 FQCN을 지정한다.

     

    package태그를 사용해서 매퍼 패키지를 등록하면 해당 패키지 내의 모든 파일을 스캔한다.

    주의할 점은 패키지 태그를 사용한 경로와 클래스속성을 이용한 경로가 동일한 파일을 가리키고 있을 경우 오류가 난다.

    댓글

Designed by Tistory.