SqlSession 객체 생성 Config.xml 설정

EUNJI LEE·2023년 7월 5일
0

MyBatis

목록 보기
1/6
post-custom-banner

MyBatis

데이터의 CRUD(입력, 조회, 수정, 삭제)를 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크이다. 기존의 JDBC를 통해서 구현했던 코드와 파라미더 설정 및 결과 매핑을 xml 파일에서 설정하여 중복되던 코드를 줄이고 보다 쉽게 구현하기 위해서 사용한다.

MyBatis는 JDBC Template를 만들어서 Connection 관리와 쿼리문 실행, 조회 결과 매핑하던 걸 전용 라이브러리를 통해서 대체해서 사용할 수 있다.

MyBatis가 제공하는 SqlSession 객체를 생성해서 사용할 수 있다. SqlSession 객체를 이용해서 트랜잭션을 관리하고 쿼리문을 실행한다.

MyBatis도 프레임워크 중 하나로 필요한 라이브러리 파일을 다운 받아서 사용한다.

https://mybatis.org/mybatis-3/ 홈페이지에서 다운 가능함

SqlSession 객체를 생성하는 방법

  1. SqlSessionFactoryBuilder 클래스의 build() 메소드를 이용해서 생성한다.
    1-1. SqlSessionFactoryBuilder 생성
    1-2. build() 메소드 실행, build() 메소드의 인수로 mybatis-config.xml 파일을 전달한다. 전달할 때는 Stream을 생성해서 전달한다.
  2. build() 메소드가 반환하는 SqlSessionFactory 클래스를 가져온다.
    2-1. openSession() 메소드를 이용한다.
    2-2. openSession() 메소드의 인수로 true, false를 설정할 수 있다. autoCommit(트랜잭션)에 대한 설정임.
  3. openSession() 메소드가 반환하는 SqlSession 클래스를 가져온다.
package com.mybatis.common;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SessionTemplate {
	//mybatis가 제공하는 SqlSession 객체를 생성해주는 공용 메소드를 선언
	public static SqlSession getSession() {
		SqlSession session=null;
		String file="mybatis-config.xml"; //xml 파일명은 생성한 것을 불러오면 된다.
		try(InputStream is=Resources.getResourceAsStream(file)) {
		//Stream 생성 후 닫을 수 있게 사용
			SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
			SqlSessionFactory factory=builder.build(is);
			session=factory.openSession(false);
		}catch(IOException e) {
			e.printStackTrace();
		}
		return session;
	}
}

config.xml 생성

config.xml 파일을 생성해서 DB와 연결 설정을 지정하고 sql문 경로를 지정해주어야 한다.

DOCTYPE

XML 파일을 생성하면 맨 위에 DOCTYPE에 xml 형식을 지정해서 해당 파일의 설정 내용이 MyBatis config 설정인 것을 선언해주어야 한다.

<?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>

<configuration>

최상위 태그로 내부에 필요한 설정을 순서대로 작성한다. configuration 태그에 마우스를 대면 Content Model에 대해서 확인이 가능한데 해당 태그의 하위 태그로는 아래 순서를 지켜서 작성해줘야 한다. 예를 들어 settings 태그를 properties 태그 위에는 작성할 수 없다.

Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)

<environments>

연결할 DB에 대한 정보를 설정하는 태그로 configuration 태그 아래에 필수로 작성해야 한다. 1개 이상의 DB정보를 설정할 수 있다. 태그 속성으로 default 값으로 environment 태그의 id를 부여해서 기본으로 연결될 DB 정보를 지정할 수 있다.

<environments default="mybatis">
		<environment id="mybatis">
			<!-- 트랜잭션을 처리하는 방법 설정 -->
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
				<property name="username" value="사용 계정"/>
				<property name="password" value="비밀번호"/>
			</dataSource>
		</environment>

<properties>

외부의 properties 파일의 내용을 불러와서 사용할 때 작성한다.

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

<settings>

MyBatis 구동 시 선언할 설정을 작성한다.

<settings>
	<setting name="jdbcTypeForNull" value="NULL">
	<!-- NULL 값이 발생하는 경우 빈 칸이 아닌 null로 인식하게 설정함 -->
</settings>

https://baessi.tistory.com/10 settings 정보 정리 참고

<typeAliases>

MyBatis에서 사용할 자료형의 별칭을 선언한다. type에는 패키지명까지 전부 기술해줘야 한다.

<typeAliases>
	<typeAlias type="com.mybatis.model.vo.Student" alias="Student"/>
</typeAliases>

위처럼 자료형의 별칭을 선언하고 <bean> 태그에 config.xml을 읽어주도록 하면 쿼리문에서 type을 작성할 때 패키지명까지 작성해서 사용하지 않고 별칭을 이용해서 쓸 수 있다.

<insert id="insertStudentAll" parameterType="com.mybatis.model.vo.Student">
	 	INSERT INTO STUDENT VALUES(SEQ_STUDENT.NEXTVAL,#{studentName},#{studentTel},#{studentEmail},#{studentAddress},DEFAULT)
</insert>
-------------------------------------------
<!-- typeAlias 적용 후 -->
<insert id="insertStudentAll" parameterType="Student">
	 	INSERT INTO STUDENT VALUES(SEQ_STUDENT.NEXTVAL,#{studentName},#{studentTel},#{studentEmail},#{studentAddress},DEFAULT)
</insert>

<mappers>

실행할 쿼리문을 작성한 xml 파일을 <mapper>태그를 이용해서 등록하는 태그로 여러 개를 작성할 수 있다.

<!-- 실행할 쿼리문을 설정한 mapper를 등록 -->
	<mappers>
		<mapper resource="/mappers/student-mapper.xml"/>
	</mappers>
profile
천천히 기록해보는 비비로그
post-custom-banner

0개의 댓글