도담도담

myBatis 본문

IT 공부/KH 정보교육원

myBatis

Zinisang 2021. 6. 29. 23:09

  • <properties> 엘리먼트는 xml 설정에서 사용할 프로퍼티를 선언하거나 외부 프로퍼티 파일을 참조할 때 사용한다.
    • "{프로퍼티 이름}"
  • <typeAliases> 엘리먼트는 <typaAlias>를 여러개 가질 수 있으며, 이를 이용하여 특정 클래스의 별칭(Alias)을 선언할 수 있다.
    • Alias는 SQL 명령어들이 저장되는 sql Mapper에서 사용할수 있다.
  • <mappers> 엘리먼트는 여러 <mapper>를 가질 수 있으며, 이를 이용하여 SQL 명령어들이 저장된 SQL 파일들을 등록할 수 있다.

board-mapping.xml

  • 기존 DAO 에서 작성한 SQL문을 대체하는 파일
  • myBatis SQL문 실행 및 반환까지 자동 매칭이 가능한 프레임 워크

기본 구조

=> xml선언부 : 

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

 

=> 전체태그(엘리먼트)들을 감싸는 root 엘리먼트 : 

<mapper namespace="자바코드에서 사용할 이름"></mapper>

 

<mapper namespace="">는 반드시 프로젝트 전체에서 유일한 이름을 가져야 한다!! 

파일명이 달라도 문제가 될수 있으니 유일한 이름으로 설정!!

(예를들어 다른 파일에서 같은 DAO 를 쓰고싶다고 하더라도, 이름을 바꿔서 사용해야한다)

=> select 관련 SQL은 <select></select>
=> insert 관련 SQL은 <insert></insert>
=> update 관련 SQL은 <update></update>
과 같은 구조로 작성한다.

즉, 

<mapper namespace="자바코드에서 사용할 이름">
  <select>~~~</select>
  <insert>~~~</insert>
  <update>~~~</update>
</mapper>


=> 각 태그에는 id 속성을 이용하여 구분할 수 있는데, 이또한 유일한 값으로 설정해야 한다.
=> 자바 코드에서는 mapper의 namespace를 이용하여 각각의 id에 접근하여 SQL 문을 실행한다.
다만 실제 실행은 myBatis의 내장 메서드가 수행한다.

=> 각 태그에서 반환타입을 설정할 경우, resultType 속성을 이용하여 지정할 수 있는데,
resultType 에 관한 설정은 myBatis 환경설정 파일에서 설정할 수 있다.

=> 각 태그의 시작태그와 닫는 태그 사이에 SQL문을 작성하는데, 일반적으로 가독성 때문에 SQL 문은 대문자를 사용한다.

=> 기존 SQL문과의 차이점
예)  

기존 SQL : update board set title=?, content=? where seq=?
mapper : update board set title=#{title}, content=#{content} where seq=#{seq}

*** 주의사항 : xml 문서는 텍스트 기반으로 작성되기 때문에 특히 SQL 문의 띄어쓰기 부분은 주의해서 작성 ***

 


sql-map-config.xml


새파일로 myBatis 파일을 생성하고, 아래와 같이 설정

 

<?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="sql-map-config"></mapper>

 

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


로 변경


설정내용
1. properties 파일 변경 : 

<properties resource="프로퍼티스 파일명"></properties>


2. Alias 설정 (자동 매핑 객체 설정) : 

<typeAliases>
  <typeAlias alias="객체명" type="클래스 풀네임" /> //boardVO
  <typeAlias alias="객체명" type="클래스 풀네임" /> //userVO
  <typeAlias alias="객체명" type="클래스 풀네임" /> //등등
</typeAliases>


3. DataSource 설정(DataSource 객체 설정) : 

<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC" />
		<dataSource type="POOLED">
			<property name="driverClassName" value="${ }" />		<!--"${ }"는 db.properties 에 설정한 이름 -->
			<property name="url" value="${ }" />
			<property name="username" value="${ }" />
			<property name="password" value="${ }" />
		</dataSource>
	</environment>
</environments>


4. Sql Mapper 설정 (SQL문 작성 문서: board-mapping.xml) :

<mappers>
	<mapper resource="패키지명/xml문서">
</mappers>

 


sql-map-config.xml 문서를 이용하여 실제로 일을 처리하는 SqlSession 객체를 생성


자바코드에서 SqlSession 객체를 생성하는 순서


1. "sql-map-config.xml" 문서 읽기 : 
Reader reader = Resource.getResourceAsReader("읽어들일 환경설정 파일");

2. 읽은 문서를 이용하여 SqlSessionFactory 객체를 생성 :
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Reader 객체);

3. SqlSessionFactory 객체를 통하여 SqlSession 객체를 얻기(생성) : 
SqlSession session = SqlSessionFactory 객체.openSession();



SqlSession 객체 내부 주요 메서드


insert("Mapper의 네임스페이스.해당 id", 전달 객체);
<mapper namespace="BoardDAO">
<insert id="insertBoard">

예) 

insert("BoardDAO.insertBoard", BoardVO 객체);
update("BoardDAO.updateBoard", BoardVO 객체);
delete("BoardDAO.deleteBoard", BoardVO 객체);
   
selectOne("BoardDAO.getBoard", BoardVO 객체);    //하나의 레코드 값만 반환
selectList("BoardDAO.getBoardList", BoardVO 객체);    //여러개의 레코드를 List 타입으로 반환
   
commit();    //실제 데이터베이스 수정을 확정하는 메서드

 

 

Comments