2 minute read

MyBatis

  • 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크
    • 영속성 : 데이터를 생성한 프로그램이 종료되어도 데이터가 유지되는 속성
  • JDBC를 통해 구현했던 코드와 파라미터 설정 및 결과 매핑을 xml 설정을 통해 쉽게 구현 가능
  • Mybatis API

Mybatis의 흐름

  • 이전에 JDBC Template을 통해 SQL을 실행하였다면 Mybatis는 해당 흐름을 전용 라이브러리를 통해 대체하여 동작한다고 생각하면 된다.

Alt text

Dao의 그림이 좀 달라진 게 보인다.
Mybatis 설정 파일에서 데이터를 얻어와서 사용하게 된다고 함.


Mybatis의 동작 구조

Alt text

  • mybatis-config.xml : mybatis의 메인 환경 설정 파일
    • 어떤 DB와 연결할 것인지
    • 어떤 쿼리문을 갖고 있을 것인지

-

  • mapper.xml : 실제로 실행시킬 SQL 정의 파일
    • 기존에 Dao에 작성했던 쿼리문을 여기에 작성
    • 여기에 작성한 쿼리문을 mybatis-config.xml 파일과 연결

-

  • Session Factory Builder : mybatis-config.xml 파일을 참조(읽어옴)
    • build(inputStream)을 통해 Sesseion Factory 생성

  • Session Factory : Session 객체를 만드는 객체
    • openSession() 메서드를 통해 SqlSession 객체를 얻어옴… 와 복잡다..

-

  • Session : SqlSession. JDBC 사용했을 때의 Connection 객체라고 생각하면됨.
    • mapper.xml을 참조하여 Sql문을 실행하고 결과값 반환
    • selectOne, selectList, selectMap, insert, update, delete 메서드를 수행하여 결과값 반환

Mybatis 라이브러리

  • Mybatis Library
    • Dynamic Web Project일 경우위 사이트에서 다운로드 받은 후 mybatis-3.4.6.jar 라이브러리를 프로젝트 내 ‘WEB-INF/lib/’ 경로에 추가
    • Java Project일 경우 build path에 mybatis-3.4.6.jar 라이브러리 등록
  • Maven repository
    • mybatis 검색 후 코드 복사하여 pom.xml에 추가
    • 프로젝트 우클릭 > maven > update project

Alt text

- Alt text


ibatis와 Mybatis

  • 기존에 Apache project에서 ibatis를 운영하던 팀이 2010년 5월 9일에 Google 팀으로 이동하면서 Mybatis로 이름 변경
  • Mybatis는 기존의 ibatis의 한계점이였던 동적 쿼리와 어노테이션 처리를 보강하여 더 나은 기능을 제공
  • ibatis는 현재 비활성화 상태이며 기존에 ibatis로 만들어진 애플리케이션의 지원을 위해 라이브러리만 제공 중
항목 ibatis Mybatis
JDK 1.4 이상 1.5 이상
패키지 구조 com.ibatis. org.apache.ibatis.
동적 쿼리 미지원 if, choose, trim, foreach 문을 지원
자바 어노테이션 미지원 지원

mybatis-config.xml

  • resources 폴더 생성 후 mybatis-config.xml 생성

Alt text

-

Alt text

pom.xml에 보면 이렇게 작성되어 있다. 이거에 맞게 폴더를 만들어 주는 건가?


mybatis-config.xml 설정

Alt text

이런식으로 사용 법을 알려준다.


mybatis 설정 선언

  • 아래의 코드를 작성하여 이하의 설정이 mybatis config 설정임을 선언
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

Mybatis 기본 설정 선언 영역

<configuration>
    .. .
</configuration>

태그 별 사용 목적

  • properties : 외부 properties 파일의 내용을 불러올 때 사용
  • settings : mybatis 구동 시 선언할 설정 작성
  • typeAliases : mybatis에서 사용할 자료형의 별칭 선언
  • environments : mybatis에서 연동할 DataBase 정보를 등록
  • mappers : 사용하고자 하는 쿼리문이 정의된 mapper 파일을 등록

Database 연결 정보 작성

  • environments 태그 사용
  • 여러 개의 Database 연결 가능
    • environment 태그 사용
    • id 속성으로 구분
    • 기본으로 연결할 Database 지정 가능
      • environments default=”development
      • default 속성에 기본으로 사용할 DB의 id와 매치
<environments default="development">
    <environment id="development">
        <!-- 
            - JDBC : JDBC가 commit, rollback을 직접 사용 가능하게 하는 옵션
            - MANAGED : JDBC가 트랜잭션에 영향을 미치지 않는 옵션
         -->
        <transactionManager type="JDBC"/>

        <!-- 
            - POOLED : connection 객체를 미리 생성 후 POOL에 저장
            - UNPOOLED : DB 요청이 올 때마다 connection 객체 생성, 사용이 끝나면 connection 종료
        -->
        <dataSource type="POOLED">
            <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
            <property name="username" value="WEB"/>
            <property name="password" value="WEB"/>
        </dataSource>
    </environment>

    <environment id="db2">
        ...
    </environment>

    <environment id="db3">
        ...
    </environment>
  </environments>

POOLED / UNPOOLED

구분 POOLED UNPOOLED
특징 최초 Connection 객체를 생성할 때 해당 정보를 pool 영역에 저장해두고 이후 Connection 객체를 생성할 때 이를 재 사용한다. Connection 객체를 별도로 저장하지 않고, 객체 호출 시 매번 생성하여 사용한다.
장점 Connection 객체를 생성하여 DataBase와 연결을 구축하는데 걸리는 시간이 단축된다. Connection 연결이 많지 않은 코드를 작성할 때 간단하게 구현 할 수 있다.
단점 단순한 로직을 수행하는 객체를 만들기에는 설정해야 할 정보가 많다. 매번 새로운 Connection 객체를 생성하므로 속도가 상대적으로 느리다.

Categories:

Updated: