MyBatis

JUNHO YEOM·2023년 1월 9일
0

DB, SQL

목록 보기
19/21

MyBatis란?

처음에는 IBatis였는데 MyBatis로 이름이 바뀌었어요
Database연동을 도와주는 Framework입니다.

이전에는 DAO를 만들고, 그 안에서 DB처리를 했었어요.
MyBatis를 이용하는 방법으로 바꿔볼게요


MyBatis 장점

  1. 자바 코드의 간결성
  2. 결과 처리가 쉬워져요 -> Map을 이용할 수 있게 해줘요
  3. SQL구문과 Java코드를 분리할 수 있게 해줘요(유지보수가 편해져요)
  4. DataSource와 Transaction처리를 지원해요

DataSource

ConnectionPool에서 사용했었어요
DBCP로 DB연결을 미리 만들어 뒀었다가, 연결을 대여해줘요!
DB에 요청을 할 때마다 연결 하는 과정을 거치지 않아도 되어서 효율적이에요.



설치하기

MyBatis 다운로드

  1. MyBatis Gitpage 접속(https://github.com/mybatis/mybatis-3/releases)
  2. mybatis-3.5.11.zip 다운로드 및 압축풀기

Module 뭔가요?

자바는 기본적으로 패키지 방식이 기본입니다.
패키지의 단점이 있어요 예를 들면 패키지가 점점 커지게 되면 무거워 져요
모듈은 패키지의 단점을 극복하기 위해 나왔어요!
모듈은 패키지를 패키지화 시킨거에요
모듈은 패키지의 추상화 단계를 한단계 올린 것입니다.
모듈방식을 사용하면 하면 패키지를 나눠서 꼭 필요한 부분만 적용 시킬 수 있어요


적용하기

클래스 패스 설정

  1. 프로젝트 만들기(프로젝트 이름: MyBatis연습하기)
  2. JavaBuild Path -> ClassPath로 적용하기
  1. project안에 folder 하나 만들기 (폴더 이름: resources)
  2. buildPath에서 source탭 -> resources를 source folder로 적용하기

XML을 만들기 위한 설정

사용자 정의 엔트리 만들기

  1. Preference 들어가기
  2. XML -> Xml catalog
  1. 사용자 정의 엔트리를 추가(User Specified Entries)
URLKey TypeKey
http://mybatis.org/dtd/mybatis-3-config.dtdPublic ID-//mybatis.org/DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtdPublic ID-//mybatis.org/DTD Mapper 3.0//EN


XML 파일 생성하기

  1. xml 파일 만들기
  2. 파일 생성창에서 others클릭
  3. 파일 형식 : xmlfile
  4. 파일 이름 : sqlMapConfig.xml
  5. Create DTD or XML schema file
  6. 다음 -> 만들기
  7. xml 파일 생성 완료!

만들어진 결과



driver.properties 파일 세팅

DB연결에 필요한 자료를 저장해요

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/library?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
user=manager
password=manager1234


XML 기본 설정

<?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>
	<!--
	property는 하나만 설정할 거에요!
	외부 파일을 이용해서 데이터베이스 접속 정보를 가져올 거에요!
	외부 파일을 하나 만들꺼구요, 이름은 driver.properties 파일로 만들고, 생성할 거에요. 
	-->
	<properties resource="./driver.properties"/>
	
	
	<!--
	MyBatis에 대한 기본 세팅 정보가 나와요!
	MyBatis가 동작하는 기본적인 동장 방식에 대한 설정이 있어요
	-->
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>		 
</configuration>


Factory 생성

  1. SqlSesstionFactoryBuilder
  2. SqlSessionFactory -> 확보 하는 것이 중요해요!
  3. sqlSession -> 실제 DB처리하기 위해 필요한 것

MyBatisConnectionFactory가 그 역할을 해줄꺼에요!

sqlSession을 얻어야 DB처리가 가능해요
공장짓기: SqlSessionFactoryBuilder(SqlMapConfig.xml을 이용해서 생성)
공장에서 SqlSession찍어내기 : SqlSessionFactory
나온 결과 : sqlSession



XML 파일은 2개를 만들어 줍니다.

  1. Config파일
  2. Map파일


sqlMapConfig.xml(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>
	<!-- MyBatis가 DB를 처리하기 위한 설정 -->
	<!--
	property는 하나만 설정할 거에요!
	외부 파일을 이용해서 데이터베이스 접속 정보를 가져올 거에요!
	외부 파일을 하나 만들꺼구요, 이름은 driver.properties 파일로 만들고, 생성할 거에요. 
	-->
	<properties resource="./driver.properties"/>
	
	
	<!--
	MyBatis에 대한 기본 세팅 정보가 나와요!
	MyBatis가 동작하는 기본적인 동장 방식에 대한 설정이 있어요
	-->
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>
		<!-- Data가 없을 경우 NULL로 처리할 꺼에요!  -->
	</settings>
	
	<!--
	별명 지정하는게 나와요! 타이핑을 줄이기 위해 사용해요
	 -->		 
	 <typeAliases>
	 	<typeAlias type="example.vo.BookVO" alias="Book"/>
	 </typeAliases>
	 
	 <!--
	 DataBase 연결 정보 선언
	 여러개의 설정을 만들어 놓고 하나를 선택해서 사용도 가능해요! 
	  -->
	  <environments default="development">	
	  		<environment id="development">
	  			<!--  연결 환경에 대한 세부사항이 나오면 되요! -->
	  			<transactionManager type="JDBC">
	  			<!--
	  			type=JDBC는 수동으로 transaction을 처리하는 방식을 이야기 해요
	  			commit(), rollback() 명령어를 직접 처리하는 방식이에요
	  			type=MANAGED이면 자동으로 transaction을 관리해요
	  			Container가 transaction을 관리해요
	  			 -->
	  			</transactionManager>
	  			
	  			<!--
	  			type="UNPOOLED" 커넥션풀 사용하지 않기
	  			type="POOLED" 커넥션풀 사용하기
	  			-->
	  			<dataSource type="POOLED">
	  				<!--
	  				실제 데이터베이스 연결 정보가 들어가요!
	  				#{} DB의 싱글 쿼테이션 형태로 들어가요 ''
	  				${} 일반적인 형태로 들어가요!
	  				name: key값, 변하면 안되는 값
	  				value: driver.property 파일에서 key로 지정해준 
	  				 -->
	  				<property name="driver" value="${driver}"/>
	  				<property name="url" value="${url}"/>
	  				<property name="username" value="${user}"/>
	  				<property name="password" value="${password}"/>
	  				
	  				<!-- 데이터베이스 connection pool에 대한 설정이 나올 수 있어! -->
	  				
	  				
	  			</dataSource>
	  		</environment>
	  </environments>
	  
	  <!-- mapping된 SQL 구문이 있는 XML 파일에 대한 설정 -->
	  <mappers>
	  	<mapper resource="./sqlmap/Book.xml" />
	  	
	  </mappers>
</configuration>

Book.xml (Map 파일)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="example.myBook">

	<select id="selectBookByISBNHashMap">
	<!--
	<![CDATA[ Query ]]> 이걸 사용하면 안에 있는 문장이 SQL문인 것을 명시해줘요(<같은것을 태그로 인식하지 않아요)
	-->
	<![CDATA[
		SELECT book_isbn, book_title, book_author, bprice
		FROM book
		WHERE book_isbn=#{isbn}
		]]>
	</select>

</mapper>

0개의 댓글