Mybatis1 : Mybatis 도입
비트캠프 서초본원 엄진영 강사님의 수업을 듣고 정리했습니다.
Mybatis1 : Mybatis 도입
Data Persistence Framework
- 데이터의 영속성(지속성; 등록,조회,변경,삭제)을 대신 처리해주는 프레임워크.
1. SQL Mapper
- 직접 SQL 문을 작성 하기 때문에 각각의 DBMS에 최적화된 SQL을 작성할 수 있다.
- 그러나 DBMS마다 미미하게 다른 SQL을 작성해야 하는 번거로움이 있다.
- 예) Mybatis
2. OR Mapper
- 전용언어 및 문법(Domain-Specific Language;DSL)을 사용하여 작성
- 실행할 때 DBMS에 맞춰서 SQL을 생성하여 실행한다.
- DBMS에 마다 SQL문을 작성할 필요가 없어 편리하지만, BMS에 최적화된 SQL을 실행할 수 없다. 즉 DBMS의 특징을 최대로 활용할 수 없다.
- 예) Hibernate, TopLink 등
3. Mybatis 도입
(1) 의존 라이브러리 추가
- mvnrepository.com 검색하여 build.gradle 파일에 추가한다.
gradle eclipse실행한 후 이클립스 에디터에서 프로젝트를refresh한다.
(2) mybatis 설정 파일 준비
mybatis-config.xml을 생성하고 편집한다.
Properties
jdbc.properties파일의 내용을 읽어온다. 읽어온 정보는 ${프로퍼티명} 문법을 이용하여 그 값을 사용할 수 있다.
<properties resource="com/eomcs/mybatis/ex01/jdbc.properties"></properties>
environments
- DBMS에 연결할 때 사용할 정보를 설정한다.
- 여러 개의 연결 정보를 설정해두고 그 중에 사용할 정보를 지정할 수 있다.
default="development"의 의미는, 여러 연결 정보 중에서development라는 연결 정보를 사용하여 실행하겠다는 의미다.
<environments default="development"> ... </environments>
- 각각의 연결 정보는 다음과 같이 environment 태그에 설정한다.
<environment id="development"> ... <environment>
transactionManager
- 트랜잭션 관리 방식을 지정한다. 아래 코드에서는 JDBC API를 사용한다는 의미이다.
- 트랜잭션을 관리한다는 것은 커넥션 객체에 대해서 대신 commit과 rollback을 한다는 의미이다.
<transactionManager type="JDBC"/>
dataSource
- DB 커넥션 풀에 관련된 정보와 DB 연결 정보를 설정한다.
- 이제 개발자가 DB 커넥션 풀을 다룰 필요가 없다. mybatis 프레임워크에서 관리한다.
<dataSource type="POOLED">
<!-- ${위의 .properties 파일에 저장된 프로퍼티명} -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
mappers
- SQL문을 모아둔 파일(SQL 맵퍼 파일이라 부른다)을 지정한다.
- SQL 맵퍼 파일에 작성해 둔 SQL문을 mybatis가 사용할 것이다.
- 맵퍼 파일의 경로를 지정할 때 classpath 경로를 사용해야 한다.
- 단 패키지명을 구분할 때
.대신에/를 사용해야 한다
<mappers>
<mapper resource="com/eomcs/mybatis/ex01/BoardMapper.xml"/>
<mapper resource="com/eomcs/mybatis/ex01/XxxxMapper.xml"/>
</mappers>
mybatis-config.xml
- 하나의 파일로 작성된
mybatis-config.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>
<properties resource="com/eomcs/mybatis/ex01/jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/eomcs/mybatis/ex01/BoardMapper.xml"/>
<mapper resource="com/eomcs/mybatis/ex01/XxxxMapper.xml"/>
</mappers>
</configuration>
(3) DB 연결 정보를 담은 프로퍼티 파일 준비
jdbc.properties
# key=value
jdbc.driver=org.mariadb.jdbc.Driver
jdbc.url=jdbc:mariadb://localhost:3306/studydb
jdbc.username=study
jdbc.password=1111
(4) SQL 문장을 작성할 파일 준비
BoardMapper.xml
- SQL 문장을 찾을 때 사용할 그룹명을 설정한다.
- 보통 그룹명은 SQL 맵퍼 파일이나 그 파일이 있는 경로를 그룹명으로 지정한다. 또는 SQL을 사용할 인터페이스나 클래스 경로를 그룹명으로 지정한다.
- 물론 어떤 이름으로 지정해도 상관없지만, 가능한 위의 규칙을 준수하여 유지보수의 일관성을 유지하라!
<?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="BoardMapper">
<select id="selectBoard" resultType="com.eomcs.mybatis.ex01.Board">
select
board_id,
title,
contents,
created_date,
view_count
from x_board
</select>
<select id="selectBoard2" resultType="com.eomcs.mybatis.ex01.Board">
select
board_id as no,
title,
contents as content,
created_date registeredDate,
view_count viewCount
from x_board
</select>
</mapper>
(5) Mybatis 객체 준비
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);