📌mybatis 설정 파일
mybatis 프레임워크
- 자체 커넥션풀(Connection Pool)을 구축할 수 있다.
- 여러 개의 DB 연결 정보를 설정해 두고 실행 상황(운영, 개발 등)에 따라 사용할 DB를 지정할 수 있다.
- 실행 성능을 높이기 위해 SELECT 결과를 캐싱해 둘 수 있다.
- SQL 맵퍼 파일에서 사용할 값 객체(VO)에 대해 별칭을 부여할 수 있다.
바로 이런 mybatis 프레임워크의 동작 환경을 설정하는 파일이 바로 mybatis 설정 파일이다.
<?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>
<properties resource="spms/dao/db.properties" />
<typeAliases>
<typeAlias type="spms.vo.Project" alias="project" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="spms/dao/MySqlProjectDao.xml" />
</mappers>
</configuration>
💡<configuration> 루트 엘리먼트
mybatis 설정 파일의 루트 엘리먼트는 configuration 이다.
configuration의 자식 엘리먼트
엘리먼트 | 용도 |
properties | 프로퍼티 파일이 있는 경로 설정 <property>를 사용하여 개별 프로퍼티 정의도 가능하다. |
settings | 프레임워크의 실행 환경을 설정 |
typeAliases | Java 클래스 이름(패키지 이름 포함)에 대한 별칭 설정 |
typeHandlers | 컬럼의 값을 Java 객체로, Java 객체를 컬럼의 값으로 변환해 주는 클래스를 설정 |
environments | 프레임워크에서 사용할 DB 정보(트랜잭션 관리자, 데이터 소스)를 설정 |
mappers | SQL 맵퍼 파일들이 있는 경로 설정 |
💡<properties> 엘리먼트
DB 연결 정보처럼 자주 변경될 수 있는 값은 mybatis 설정 파일에 두지 않고 보통 프로퍼티 파일에 저장한다. 이러한 프로퍼티 파일을 로딩하려면 <properties> 태그를 사용하면 된다.
<properties resource="spms/dao/db.properties" />
프로퍼티 파일이 클래스 경로(CLASSPATH)에 있다면 resource 속성을 사용하여 설정한다. 만약 클래스 경로가 아닌 다른 경로에 있다면 url 속성을 사용한다. 프로퍼티 파일이 클래스 경로에 있지 않고 C드라이버 내에 있다고 했을때 프로퍼티 파일 설정은 다음과 같다.
<properties url="file:///c:/db.properties"/>
개별 프로퍼티 설정
프로퍼티 파일에 정의된 것 외에 추가로 프로퍼티를 정의할 수 있다. 이때는 <property>태그를 사용하여 프로퍼티 이름과 값을 정의하면 된다.
<properties resource="spms/dao/db.properties">
<property name="username" value="아이디"/>
<property name="password" value="비밀번호"/>
</properties>
💡<settings> 엘리먼트
로그 출력과 관련된 태그이다. 이에 대해서는 포스팅을 별도로 하도록 하겠다.
💡<typeAliases> 엘리먼트
SQL 맵퍼 파일에서 매개변수 타입이나 결과 타입을 지정할 때 긴 이름의 클래스명 대신 짧은 이름의 별칭을 사용할 수 있다. 이때 <typeAliases> 태그를 사용하여 별칭을 설정할 수 있고 각 별칭의 정의는 <typeAlias> 태그를 사용한다.
<typeAliases>
<typeAlias type="spms.vo.Project" alias="project" />
</typeAliases>
💡<environments> 엘리먼트
DB 환경 정보를 설정할 때 사용하는 태그이다.
각각의 DB 접속 정보는 <environment>태그를 이용하여 정의할 수 있고 id 속성은 <environment>를 구분할 때 사용되는 식별자이다. 이때 여러 개의 DB 접속 정보를 설정할 수 있는데 설정된 DB 정보 중에서 하나를 선택할 때는 default 속성을 사용한다.
<environments default="test">
<environment id="test"> ... </environment>
<environment id="testtest"> ... </environment>
</environments>
<environment> 엘리먼트
1)트랜잭션 관리
<environment>는 트랜잭션 관리도 할 수 있다. 트랜잭션(Transaction)을 간단하게 다시 설명하자면, 여러 개의 데이터 변경 작업(insert, update, delete)을 하나의 작업으로 묶은 것이다. mybatis에서는 트랜잭션을 관리하는 유형이 두 가지가 있다.
트랜잭션 관리 유형 | 설명 |
JDBC | 직접 JDBC의 commit, rollback 기능을 사용하여 mybatis 자체에서 트랜잭션을 관리 |
MANAGED | 서버의 트랜잭션 관리 기능을 이용 즉, Java EE 어플리케이션 서버나 서블릿 컨테이너에서 트랜잭션 관리 |
다음 코드와 같이 <transactionManager>를 사용하여 트랜잭션 관리 유형을 설정할 수 있다. 이때 type으로는 트랜잭션 관리 유형(JDBC 또는 MANAGED)을 지정하면 된다.
<transactionManager type="JDBC"/>
2)데이터 소스 설정
mybatis는 JDBC 표준 인터페이스인 javax.sql.DataSource 구현체를 이용하여 DB 커넥션을 다룬다. mybatis에서 사용 가능알 데이터 소스 유형은 세 가지가 있다.
데이터 소스 유형 | 설명 |
UNPOOLED | DB 커넥션을 요청할 때마다 커넥션 객체를 생성한다. 높은 성능을 요구 않는 어플리케이션에 적합하다. |
POOLED | DB 커넥션 객체를 생성해두고, 요청하면 즉시 반환한다. DB 연결하는 과정이 없기에 속도가 빠르다. |
JNDI | Java EE 어플리케이션 서버나 서블릿 컨테이너에서 제공하는 데이터 소스를 사용한다. |
데이터 소스를 설정하려면 <datasource> 엘리먼트를 사용해야 한다.
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
dataSource의 type 속성이 POOLED로 되어 있으므로 mybatis가 자체의 DB 커넥션풀을 사용한다는 의미가 된다.
JDNI 사용 경우
mybatis에서 직접 DB 커넥션을 관리하겠다는 의미이다. 즉 톰캣 서버(서블릿 컨테이너)에서 제공하는 데이터 소스를 사용하도록 변경하여야 한다.
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/MySQLDB"/>
</dataSource>
</environment>
<dataSource>의 type 값을 JNDI로 변경한다. 이 경우 data_source 속성을 지정하여야 하는데 톰캣 서버에 정의된 대로 이 속성의 값을 바꾸어주어야 한다.
추가적으로 mybatis에서 DBMS 연결을 관리하지 않기 떄문에 db.properties 파일을 참조할 일이 없어진다. 따라서 설정 파일에서 db.properties 파일을 참조하는 부분을 지워주면 된다.
💡<mappers> 엘리먼트
<mappers>태그는 SQL 맵퍼 파일들의 정보를 설정할 때 사용한다. 각각의 SQL 맵퍼 파일의 정보는 <mapper> 태그로 정의하여야 한다.
SQL 맵퍼 경로 설정
<mapper> 태그로 SQL 맵퍼 경로 설정하는 방법은 두 가지가 있다.
- Java의 클래스 경로를 사용하는 방법
<mappers>
<mapper resource="spms/dao/MySqlProjectDao.xml"/>
</mappers>
- 운영체제의 파일 시스템 경로를 사용하는 방법
<mappers>
<mapper url="file:///c:/dao/MySqlProjectDao.xml"/>
</mappers>
'MyBatis' 카테고리의 다른 글
[mybatis] springMVC + MyBatis 연동 (스프링MVC + 마이바티스) (0) | 2022.09.10 |
---|---|
MyBatis 동적 SQL 사용 (예시. 항목 별 정렬) (0) | 2022.07.21 |
[mybatis] SQL mapper(맵퍼) 파일 (0) | 2022.07.21 |
[mybatis] mybatis 적용 (0) | 2022.07.20 |
[mybatis] mybatis(마이바티스)란? (mybatis 환경세팅) (0) | 2022.07.20 |