MyBatis / mybatis-config.xml
MyBatis
- 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크
- 영속성 : 데이터를 생성한 프로그램이 종료되어도 데이터가 유지되는 속성
- JDBC를 통해 구현했던 코드와 파라미터 설정 및 결과 매핑을 xml 설정을 통해 쉽게 구현 가능
- Mybatis API
Mybatis의 흐름
- 이전에 JDBC Template을 통해 SQL을 실행하였다면 Mybatis는 해당 흐름을 전용 라이브러리를 통해 대체하여 동작한다고 생각하면 된다.
Dao의 그림이 좀 달라진 게 보인다.
Mybatis 설정 파일에서 데이터를 얻어와서 사용하게 된다고 함.
Mybatis의 동작 구조
- 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
-
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 생성
-
pom.xml에 보면 이렇게 작성되어 있다. 이거에 맞게 폴더를 만들어 주는 건가?
mybatis-config.xml 설정
- Mybatis API > 시작하기 탭
이런식으로 사용 법을 알려준다.
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 객체를 생성하므로 속도가 상대적으로 느리다. |