본문 바로가기

Programming/Framework

DAY 137. Mybatis - xml 파일 만들기

 

 

mybatis-config 설정하기

 

01. mybatis-config.xml 파일 만들기

src > main > resources 폴더 생성하고 그 하위에 만들었다.

 

<?xml version="1.0" encoding="UTF-8"?>

<!-- Mybatis 설정 파일임을 선언하는 영역 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- Mybatis 설정과 관련된 기본 설정들을 선언하는 영역 -->
<!-- configuration : 설정을 위한 가장 최상위 태그, 내부에 필요한 설정들을 작성 -->  
<configuration>

	<!-- 
		Database에 연결할 설정 정보들을 선언하는 영역  
		
		environments의 default 속성
			- Database에 연결 설정을 여러 개 생성할 수 있는데, 그 중에서 기본으로 연결할 설정 정보를 지정하는 속성(envrionment의 id로 구분)
			- 안에 여러 개의 <environment> 태그를 가질 수 있다.
	-->
	<environments default="web">
		<environment id="web">
			<!-- 
				transactionManager의 type 속성 
					- JDBC : JDBC가 commit, rollback을 직접 사용 가능하도록 하는 옵션
					- MANAGED : JDBC가 트랜잭션에 대해 어떠한 영향도 행사하지 않는 옵션(무조건 AUTO COMMIT)
			-->
			<transactionManager type="JDBC" />
			<!-- 
				dataSource : 실제 DB 접속에 관한 정보를 넣는 태그
				
				type 속성
					- POOLED : 커넥션 객체를 미리 만들어서 POOL에 저장해서 사용하는 설정, 객체 만드는 데 시간을 단축할 수 있다. 
					- UNPOOLED : DB 요청이 올 때마다 커넥션 객체를 만들고 사용이 끝나면 닫는 설정, 
								 커넥션 객체를 미리 만들어 놓는 설정이 아니므로 상대적으로 느릴 수 있다.	
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:~~~/>
				<property name="username" value="WEB"/>
				<property name="password" value="WEB"/>
			</dataSource>
		</environment>
		
		<environment id="abc">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:~~~"/>
				<property name="username" value="ABC"/>
				<property name="password" value="ABC"/>
			</dataSource>
		</environment>
		
	</environments>
	
	<!-- DB에서 사용하는 쿼리문들을 담는 mapper 파일을 등록하는 영역 -->
	<mappers>
		<mapper resource="mappers/member/member-mapper.xml"/>
	</mappers>
	
</configuration>

 

<properties> 태그 : 외부 properties 파일의 내용을 불러올 때 사용한다.

<properties resource="경로 + 파일명.properties">
	<property name="key명" value="설정값" />
</properties>

혹은

<dataSource type="POOLED|UNPOOLED">
	<property name="명칭" value="${ properties에 설정된 key명 }" />
</dataSource>

 

<settings> 태그 : mybatis 구동 시 선언할 설정들을 작성, RUNTIME시 마이바티스의 행위를 조정하기 위한 중요 값들

프로그램 성능 최적화를 위해서 다양하게 활용하면 좋다.

 

<settings>
	<setting name="jdbcTypeForNull" value="NULL" />
</settings>

 

https://mybatis.org/mybatis-3/ko/configuration.html

 

MyBatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

<typeAliases> 태그 : mybatis에서 사용할 자료형(클래스)의 별칭을 선언하는 태그 / Mybatis 내장 별칭 참고

<typeAliases>
	<typeAlias type="패키지명 전부 기술" alias="ABC" />
</typeAliases>

 

<environments> 태그 : mybatis에서 연동할 DataBase 정보를 등록하는 태그, id로 구분하며 <environment> 태그 여러 개 작성하여 연결할 DB를 여러 개 구성할 수도 있다.

안에 <dataSource> 태그가 필수로 있어야 한다.

<environments>
	<environment>
		<tranactionManger tyep="JDBC" />
		<dataSource type="POOLED / UNPOOLED">
			<property name="driver" value="xxx" />
			<property name="url" value="xxx" />
			<property name="username" value="xxx" />
			<property name="password" value="xxx" />
	</environment>
</environments>

 

 

<mappers> 태그 : 사용하고자 하는 쿼리문이 정의된 mapper 파일을 등록하는 태그

xml 파일 생성만 한다고 해서 바로 사용할 수 있는 것이 아니라 반드시 config.xml 파일의 <mappers> 태그 안에 등록해야 한다.

 

<mappers>
	<mapper resource="~~~/member-mapper.xml" />
</mappers>

 

 


 

Mybatis Mapper

02. mapper.xml 파일 만들기

만들어 놓은 쿼리문 중에서도 어떤 것을 사용할지 config.xml 파일에 등록해야 한다.

src > main > resources > mappers > 구분할 블라블라명 폴더 생성하고 그 하위에 만들었다.

그 안에 식별하기 쉽게 블라블라-mapper.xml 식으로 만든다.

 

<?xml version="1.0" encoding="UTF-8"?>

<!-- Mapper 설정 파일임을 선언 -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<!-- mapper의 namespace 속성 : 외부에서 mapper에 접근할 수 있는 이름 -->
<!-- mapper 태그 안에 작성할 내용을 적는다. -->
<mapper namespace="memberMapper">

	<!-- 
		SELECT 구문
			id 속성 : 쿼리문의 고유 아이디(외부에서 참조할 때 id 속성을 가지고 참조한다.)
			resultType 속성 : 쿼리 실행 후 조회된 결과 값의 자료형
	 -->
 	<select id="selectCount" resultType="_int">
 		SELECT COUNT(*) FROM MEMBER 
 	</select>
 
 
</mapper>

 

 

<select> 태그 : SQL 조회 구문을 작성할 때 사용하는 태그

해당 쿼리를 외부에서 접근하고 싶을 때, namespace.id 명을 적는다.

#{ field } : pstmt의 “?” 위치 홀더의 역할이다. 전달된 값을 뜻한다. 여러 줄로 줄바꿈 문자를 섞어서 사용도 가능하다. 단, 쿼리의 마지막을 알리는 세미콜론은 작성하지 않는다.

 

속성명 내용
id 구문을  찾기 위해 사용될 수 있는 namespace 내 유일한 구분자
parameterType 구문에 전달될 파라미터의 클래스 명(패키지 경로 포함) or 별칭
resultType 리턴되는 타입의 패키지 경로를 포함한 전체 클래스 명 or 별칭,
collection인 경우 list, arraylist로 설정 가능
** 수행한 결과 값으로 반환되는 type
resultMap 사용할 resultMap의 id를 적는다.

** reulstMap과 resultType은 동시에 둘 다 사용할 수 없고, 하나만 선언해야 한다.

 

 

<insert>, <update>, <delete> 태그

 

 

<resultMap> 태그 : 조회한 결과를 객체와 행 간의 1:1 매칭이 아니라, 원하는 객체의 필드에 담아서 반환하고자 할 때 사용한다.

mybatis-config.xml 파일에 typeAlias를 지정하지 않으면, 패키지 명부터 클래스명까지 모두 기술해야 한다.

<id> : 테이블의 기본 키(Primary Key)

<result> : 테이블의 일반 컬럼

 

<resultMap type="ResultSet의 결과를 담을 자바 객체의 타입(클래스명 - 풀패키지로) 기입한다. (또는 alias 사용)" id="resultMap의 고유 아이디로 select 문에서 resultMap 속성에 사용한다.">
	<id property="자바 객체의 필드명을 기술" column="DB에서 실제 조회되는 해당 컬럼명">
	<result property="자바 객체의 필드명을 기술" column="DB에서 실제 조회되는 해당 컬럼명">
</resultMap>

 

 


 

03. SqlSessionTemplate.java 파일 만들기

mybatis.config.xml, mapper.xml 파일 생성 후 → common 패키지 생성 → Template 클래스 만들기 → SQL Session 반환하는 static 메소드를 작성한다.

 

1. mybatis-config.xml 설정 정보를 InputStream 객체를 통해 읽어온다.

2. SqlSessionFactoryBuilder 객체를 생성하고 build() 메소드를 통해 SqlSessionFactory 객체 생성

3. SqlSessionFactory 객체의 openSession() 메소드를 통해 sqlSession 객체 생성

  → openSession(false) 속성은 “auto commit을 사용하지 않겠다”는 뜻 (기본 값 : true)

 

 


 

04. SqlSession을 통한 쿼리 실행

 

1. Service 클래스에서 getSqlSession() 메소드 호출 → SqlSession 생성

2. Dao 클래스의 메소드 호출시 전달 인자로 SqlSession 객체 전달

3. Dao 클래스의 메소드에서 SqlSession 객체를 통해 쿼리에 접근