3 minute read

mapper.xml

  • SQL 쿼리문 작성
  • 각 패키지 마다 존재
    • ex) 게시판, 회원 등
  • resources 폴더 내에 mappers 폴더 생성 후 파일 생성

Alt text


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 객체 생성

Alt text

-

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)

Categories:

Updated: