mapper.xml 설정 / SqlSession 생성
mapper.xml
- SQL 쿼리문 작성
- 각 패키지 마다 존재
- ex) 게시판, 회원 등
- resources 폴더 내에 mappers 폴더 생성 후 파일 생성
maaper 설정 선언
- 아래의 코드를 작성하여 이하의 설정이 maaper 설정임을 선언
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
이건 mybatis 사이트에 코드가 없어서 강사님이 카톡으로 전달해주심
태그 별 사용 목적
- mapper : 외부에서 접근할 수 있는 이름인 namespace 속성 기입
- resultMap : 조회한 결과를 객체와 Row 간의 1:1 매칭이 아닌, 원하는 객체의 필드에 담아 반환하고자 할 때 사용
- select : SQL의 조회 구문을 작성할 때 사용되는 태그로 해당 쿼리를 외부에서 접근하고자 할 때 namespace.id 명을 적어 접근 가능
select 태그
속성명 | 내용 |
---|---|
id | 구문을 찾기 위해 사용될 수 있는 네임스페이스 내 유일한 구분자 |
parameterType | 구문에 전달될 파라미터의 클래스 명(패키지 경로 포함)이나 별칭 |
resultType | 리턴되는 타입의 패키지 경로를 포함한 전체 클래스 명이나 별칭, collection인 경우 list, arraylist로 설정 가능 |
resultMap | 사용할 resultMap의 id를 기술 |
flushCache | 이 값을 true로 설정하면 구문이 호출 될 때마다 로컬, 2nd 레벨 캐시가 지워진다(flush). (기본 값 : false) |
useCache | 이 값을 true로 설정하면 구문의 결과가 2nd 레벨 캐시에 저장된다. (기본 값 : true) |
timeout | 예외가 발생하기 전에 데이터베이스의 요청 결과를 기다리는 최대 시간을 설정한다. 드라이버에 따라 다소 지원되지 않을 수 있다. |
statementType | STATEMENT, PREPARED 또는 CALLABLE 중 하나를 선택할 수 있다. Mybatis에게 Statement, PreparedStatement 또는 CallableStatement를 사용하게 한다. (기본 값 : PREPARED) |
resultMap과 resultType은 둘 모두를 사용할 수 없으며 둘 중 하나만 선언해야 한다.
-
<!-- 회원수 조희 -->
<select id="selectCount" resultType="_int">
<!--
SELECT 구문
- id : query문 고유 id
- resultType : query문 조회 결과의 자료형
-->
SELECT COUNT(*) FROM MEMBER
</select>
insert / update / delete 태그
속성명 | 내용 |
---|---|
id | 구문을 찾기 위해 사용될 수 있는 네임스페이스 내 유일한 구분자 |
parameterType | 구문에 전달될 파라미터의 클래스 명(패키지 경로 포함)이나 별칭 |
flushCache | 이 값을 true로 설정하면 구문이 호출 될 때마다 캐시가 지워진다(flush). (기본 값 : false) |
timeout | 예외가 발생하기 전에 데이터베이스의 요청 결과를 기다리는 최대 시간을 설정한다. 드라이버에 따라 다소 지원되지 않을 수 있다 |
userGeneratedKeys | (insert, update에만 적용) 데이터베이스에서 내부적으로 생성한 키(예를 들어 MySQL 또는 SQL Server의 자동 증가 필드)를 받는 JDBC getGeneratedKeys 메소드를 사용하도록 설정한다. (기본 값 : false) |
keyProperty | (insert, update에만 적용) getGeneratedKeys 메소드나 insert 구문의 selectKey 태그의 설정 select 문의 결과를 저장할 프로퍼티를 지정. 디폴트는 셋팅하지 않는 것이다. 여러 개의 컬럼을 사용한다면 프로퍼티명에 콤마를 구분자로 나열할 수 있다. |
mapper 파일 등록
- mybatis-config.xml 파일에 등록
<mappers>
<mapper resource="mappers/member/member-mapper.xml"/>
</mappers>
SqlSession 생성
- mybatis-config.xml의 설정 정보를 InputStream 객체를 통해 읽어옴
- SqlSessionFactoryBuilder 객체를 생성하고 build() 메소드를 통해 SqlSessionFactory 객체를 생성
- SqlSessionFactory 객체의 openSession() 메서드를 통해 SqlSession 객체 생성
-
public class SqlSessionTemplate {
public static SqlSession getSession() {
InputStream is;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
SqlSession session = null;
try {
// Resources : myBatis에서 제공하는 유틸 클래스. 클래스 path로부터 자원(resource)을 읽어오는 메서드 제공
is = Resources.getResourceAsStream("mybatis-config.xml");
builder = new SqlSessionFactoryBuilder();
// "mybatis-config.xml"을 참고하여 연결된 DB에서 SQL문의 실행이 가능하게 하는 sql session 객체 생성
factory = builder.build(is);
// factory = builder.build(is, "kh"); // DB의 다른 계정도 연결 가능
// false : auto commit 비활성
session = factory.openSession(false);
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
}
SqlSessionFactoryBuilder 메서드
메서드 | 내용 |
---|---|
build(InputStream) | build(InputStream) |
build(InputStream, String) | config.xml 파일과 지정한 DB를 불러옴 |
build(InputStream, Properties) | config.xml 파일과 프로퍼티로 설정한 내용으로 불러옴 (“${ key명 }”) |
build(InputStream, String, Properties) | config.xml 파일과 지정한 DB, Properties 파일을 불러옴 |
build(configuration) | configuration 객체에 설정한 내용을 불러옴 |
- config.xml은 Resource 객체의 getResourceAsStream 메소드를 이용하여 InputStream으로 가져옴
SqlSessionFactory 메서드
메서드 | 내용 |
---|---|
openSession() | 기본값을 통해 SqlSession 생성 |
openSession(Boolean) | SqlSession 생성 시 AutoCommit 여부를 true / false로 지정. (기본 값 : true) |
openSession(Connection) | 직접 생성한 Connection 객체를 이용해 SqlSession을 생성. (기본 값 : X) |
openSession(ExecutorType) | 쿼리를 실행 할 때 PreparedStatement의 재사용 여부 설정. (기본 값 : ExecutorType.SIMPLE) |