본문 바로가기

Spring

MyBatis

MyBatis란 무엇인가?

- 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.

- JDBC코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.(코드의 간결성 및 유지보수성 향상)

- 데이터베이스 레코드에 원시타입과 Map인터페이스 그리고 자바 POJO를 설정하고 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.

 

 

MyBatis3 구성요소 및 예제

 

  • MyBatis configuration file : 데이터베이스 설정과 트랜잭션 등 마이바티스가 동작하는 규칙을 정의하는 작업 설정 파일.
  • org.apache.ibatis.session.SqlSessionFactoryBuilder : MyBatis3 구성 파일을 읽고 생성하는 SqlSessionFactory 구성요소.
  • org.apache.ibatis.session.SqlSessionFactory : SqlSession을 생성하는 구성 요소.
  • org.apache.ibatis.session.SqlSession : SQL 실행 및 트랜잭션 제어를 위한 API를 제공하는 구성 요소로서 MyBatis3를 사용하여 데이터베이스에 액세스할 때 가장 중요한 역할을 한다.
  • Mapper interface : typeafe에서 매핑 파일에 정의된 SQL을 호출하는 인터페이스.  MyBatis3는 매퍼 인터페이스에 대한 구현 클래스를 자동으로 생성하므로 개발자는 인터페이스만 생성하면 된다.
  • Mapping file :  SQL 및 O/R 매핑 설정을 설명하는 XML 파일.

 

 

 모든 마이바티스 앱은 SqlSessionFactory를 사용한다. SqlSessionFactorySqlSessionFactoryBuilder를 사용하여 만들수 있고 XML설정파일에서 SqlSessionFactory를 빌드할 수 있다.

InputStream인스턴스를 사용하여 자원을 사용하는 예시이며 마이바티스는 클래스패스와 다른 위치에서 자원을 로드하는 것으로 좀더 쉽게 해주는 Resources라는 유틸성 클래스를 가지고 있다. 

private SqlSessionFactory getSqlSessionFactory() {
		String resource = "mybatis/mybatis-config.xml";
		InputStream inputStream;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			throw new IllegalArgumentException(e);
		}
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

 

 

XML설정파일의 최상단에서는 XML문서의 유효성을 체크하고 environment는 트랜잭션 관리와 커넥션 풀링을 위한 환경설정을 나타낸다. transactionManager는 트랜잭션 제어, dataSource는 DB Connection 인스턴스를 가져오기 위함이다.

mappers에는 매핑정의와 SQL코드를 가지는 mapper를 지정한다.(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>
 	<typeAliases>
 		<typeAlias type="mybatis.Comment" alias="Comment"/>
 	</typeAliases>
 	<environments default="development">
 		<environment id="development">
 			<transactionManager type="JDBC"/>
 			<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="scott"/>
 			<property name="password" value="1111"/>
 			</dataSource>
 		</environment>
 	</environments>
 	<mappers>
		<mapper resource="mybatis/CommentMapper.xml"/> 	
 	</mappers>
 </configuration>

 

 

아까 설명했던 SqlSessionFactory에서 SqlSession를 생성하여 간단한 select를 하는 예제이다. SqlSession을 닫을때는

꼭 finally 블록에서 닫아야 한다.

	public List<Comment> selectComment() {
		SqlSession sqlSession = getSqlSessionFactory().openSession();
		try {
			return sqlSession.selectList(namespace + ".selectComment");
		} finally {
			sqlSession.close();
		}
	}

 

 

CommentMapper라는 네임스페이스를 통해 CommentMapper.selectComment가 불려져서 테이블 TCOMMENT의 컬럼값 4개를 출력할 수 있다. 하나의 매퍼 XML파일(CommentMapper.xml)에는 여러 매핑구문을 정의할 수 있다.

<?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="CommentMapper">
	<cache />

	<sql id="BaseColumns">
		comment_no AS commentNo,
		user_id AS userId,
		comment_content
		AS commentContent,
		reg_date AS regDate
	</sql>

	<!-- select -->
	<select id="selectComment" resultType="Comment">
		SELECT
		<include refid="BaseColumns" />
		FROM TCOMMENT
	</select>
728x90
반응형