처음에는 IBatis였는데 MyBatis로 이름이 바뀌었어요
Database연동을 도와주는 Framework입니다.
이전에는 DAO를 만들고, 그 안에서 DB처리를 했었어요.
MyBatis를 이용하는 방법으로 바꿔볼게요
DataSource
ConnectionPool에서 사용했었어요
DBCP로 DB연결을 미리 만들어 뒀었다가, 연결을 대여해줘요!
DB에 요청을 할 때마다 연결 하는 과정을 거치지 않아도 되어서 효율적이에요.
Module 뭔가요?
자바는 기본적으로 패키지 방식이 기본입니다.
패키지의 단점이 있어요 예를 들면 패키지가 점점 커지게 되면 무거워 져요
모듈은 패키지의 단점을 극복하기 위해 나왔어요!
모듈은 패키지를 패키지화 시킨거에요
모듈은 패키지의 추상화 단계를 한단계 올린 것입니다.
모듈방식을 사용하면 하면 패키지를 나눠서 꼭 필요한 부분만 적용 시킬 수 있어요
URL | Key Type | Key |
---|---|---|
http://mybatis.org/dtd/mybatis-3-config.dtd | Public ID | -//mybatis.org/DTD Config 3.0//EN |
http://mybatis.org/dtd/mybatis-3-mapper.dtd | Public ID | -//mybatis.org/DTD Mapper 3.0//EN |
만들어진 결과
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 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>
MyBatisConnectionFactory가 그 역할을 해줄꺼에요!
sqlSession을 얻어야 DB처리가 가능해요
공장짓기: SqlSessionFactoryBuilder(SqlMapConfig.xml을 이용해서 생성)
공장에서 SqlSession찍어내기 : SqlSessionFactory
나온 결과 : sqlSession
<?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>
<?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>