* MyBatis SQL Mapper Framework 사용하기 *
1. MyBatis Library Download
=> 현재 Maven 을 사용하여 의존성(즉, 필요한 라이브러리들)을 관리하기 때문에,
아래와 같이 "pom.xml" 파일에 의존성 추가하면 끝!
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
2. MyBatis의 설정파일(XML파일이어야 함)을 생성
a. 설정파일의 이름: 우리 맘대로 지어도 되지만, 일반적으로 "mybatis-config.xml"이라고 지음.
b. 설정파일을 생성하고, 이 XML파일의 위치는 "src/main/resources" 소스폴더에 저장
(설정파일은 프로그램 소스파일이 아니되, MyBatis 실행에 반드시 필요한 소위 "자원파일"이기 때문에)
c. MyBatis 가 SQL을 처리할 수 있는 실행환경을 설정파일에 설정
<environments default="사용할 실행환경의 이름">
<environment id="실행환경이름1">
<transactionManager type="JDBC" /> // 트랜잭션 관리자의 유형 설정
<dataSource type="UNPOOLED"> // Connection Pool의 형태를 갖추고 있지 않다! 라는 의미
기본적인 JDBC 연결생성을 위한 4가지의 정보 설정(url, driver, user, pass)
</dataSource>
</environment>
...
<environment id="실행환경이름N">
<transactionManager type="JDBC" /> // 트랜잭션 관리자의 유형 설정
<dataSource type="POOLED"> // Connection Pool의 형태를 갖추고 있다! 라는 의미
기본적인 JDBC 연결생성을 위한 4가지의 정보 설정(url, driver, user, pass) +
Connection Pool의 특성에 관여하는 설정 정보를 추가로 가짐
</dataSource>
</environment>
</environments>
* 트랜잭션 관리자란?=> "트랜잭션" 관리(즉, TCL언어의 사용이 가능)
(1) WAS 안에 이미 구현체가 있음
(2) JDBC Driver 라이브러리 안에도 이미 구현체가 있음
(3) Spring Framework 안에도 이미 구현체가 있음
(4) 데이터베이스 인스턴스 안에도 이미 구현체가 있음
- 위의 모든 트랜잭션관리자란 구현체는 모두,
같은 표준(X/Open XA규약)에 따라 구현하게 되어 있음
* 데이터 소스(Data Source)가 무엇인가? => "Connection Pool"을 제공하는 객체
- 그럼, Connection Pool은 무엇인가? => JDBC Connection 들이 잔뜩 들어있는 Pool
- Connection Pool의 규격(OOP언어에서는 자바 인터페이스를 의미한다!)을 가지고 있음
- 실제타입: javax.sql.DataSource (I) 인터페이스(규격)
- Connection Pool 은 DataSource 라고 부르는 인터페이스의 "구현객체"
public class ConnectionPool implements javax.sql.DataSource {
} // 인터페이스의 구현클래스
* Connection Pool 의 특징:
- Pool 안에 생성될 JDBC Connection 개수에 대하여, 최대 몇개/최소 몇개라는 정보를 가짐
- JDBC Connection 의 필요량에 따라, Max개수만큼 늘어났다가(extended),
Min 개수만큼 줄어듦(shrinked)
3. Mapper XML 파일에, MyBatis가 수행할 SQL문장을 만들어 저장하자! (2가지 방식)
(1) Mapper XML파일에 SQL문장을 저장
- 우선 Mapper XML 파일을 생성하되, 파일의 이름은 관례상 아래와 같이 정한다:
(파일명 관례: 테이블명+Mapper.xml)
- 예1: tbl_board 테이블에 대한 SQL문장을 저장하는 Mapper XML파일의 이름
=> Board+Mapper.xml => BoardMapper.xml
- 예2: tbl_member 테이블에 대한 SQL문장을 저장하는 Mapper XML파일의 이름
=> Member+Mapper.xml => MemberMapper.xml
(2) 자바 인터페이스의 추상메소드에 저장: ===> "Mapper Interface"라고 부른다
MyBatis가 제공하는 Annotation을 추상메소드 위에 붙이고, 이 Annotation의 속성으로 SQL문장을 저장
4. MyBatis 의 SqlSessionFactory를 이용해서, Mapper XML파일에 등록된 특정 SQL문장을 수행시키는 방법
- SqlSessionFactoryBuilder 객체를 생성
- Builder객체의 build(마이바티스설정파일에대한InputStream객체)메소드를 호출 => SqlSessionFactory 객체 생성
- SqlSessionFactory.openSession() 메소드 호출로, 하나의 SqlSession 객체를 생산
- SqlSession.selectOne(String mappedStatement) 메소드로, Mapper XML파일에 등록된 "특정" SQL문장 실행
.selectList(String mappedStatement) Ditto.
* 왜 "Mapped Statement" 라고 할까?? => 2개의 정보를 이용해서, 1개의 SQL문장이 특정되는 구조이기 떄문에
(1) namespace + (2) "." + (3) id => 2개의 정보로 1개의 SQL문장이 사상(Mapping된 것임)
(주의) SqlSession.selectOne("SELECT sysdate FROM dual"); 을 의미하는 것이 아님! 어디까지나 2개의 정보를 '.' 문자로 이어서 만든 문자열을 지정
5. VO패턴 -- Value Object' (값객체)
- 영속성 계층에 속한 테이블의 한 개의 레코드를 저장하고 "수정할 수 없게(immutable)" 만든 객체를 찍어낼 수 있는 클래스를 만드는 설계방식
- 이 패턴을 따르는 클래스를 => "Value Object Class" or "VO" 클래스라고 함.
- 클래스의 필드는 테이블의 스키마(컬럼구조)와 동일하게 작성해야 함.
'교육과정 기록 > 💻back-end' 카테고리의 다른 글
Spring 의존성 주입 (DI) (0) | 2022.08.10 |
---|---|
[08.05] Quartz (0) | 2022.08.05 |
[08.02] MyBatis (0) | 2022.08.02 |
[7.28] JSP - EL (0) | 2022.07.28 |
[7.27] JSP - 액션 태그, 자바빈(JavaBeans) 규약 (0) | 2022.07.27 |