myBatis
- <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(); //실제 데이터베이스 수정을 확정하는 메서드