티스토리 뷰

지난 포스팅에서는 MyBatis와 Spring Boot를 연동해봤습니다.

이번에는 MyBatis Config와 Mapper 인터페이스에 있는 쿼리를 XML로 빼내는 방법에 대해서 알아보겠습니다.

1. resource 밑에 mybatis라는 폴더를 만들고, mybatis 폴더 밑에 mapper라는 폴더를 만듭니다. 그리고 mapper 밑에 HomeMapper.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">
<mapper namespace="com.cusonar.example.home.mapper.HomeMapper">
	<select id="readHome" parameterType="String" resultType="Home">
		SELECT * FROM home WHERE name = #{name}
	</select>
</mapper>

     . 기본적인 MyBatis의 mapper 형식입니다. mapper DTD를 선언해주고, namespace는 Mapper 인터페이스와 매핑시켜줍니다. 그러면 HomeMapper 인터페이스에 있는 메소드명과 XML에 있는 ID가 일치할 경우 자동으로 적용됩니다. resultType의 Home은 나중에 Alias에 배워보겠습니다. Alias를 안쓰실 경우에는 Package이름과 함께 Fully 써주시면 됩니다.

     * DTD 파일이란? Document Type Definition의 약자로, XML파일의 구조를 잡아주는 역할을 합니다. DTD를 선언하고 Ctrl+Space를 하면 자동완성을 쉽게 할 수 있습니다.

2. application.properties 파일에서 Mapper Scan과 Alias를 지정해줍니다.
mybatis.type-aliases-package=com.cusonar.example.home.domain,com.cusonar.example.user.domain
mybatis.mapper-locations=mybatis/mapper/**/*.xml
  .  mapper-location은 mapper.xml 파일 형식의 파일 패턴을 넣어주면 됩니다. **은 하위 폴더 레벨에 상관없이 모든 경로를 뜻하며, *는 아무 이름이나 와도 된다는것을 뜻합니다. 위와 같이 하는 경우 mybatis/mapper/a/b/c/d.xml이라도 가져올 수 있습니다. 만약 위에서 폴더 구조를 다르게 하셨다면 맞게 수정하시면 됩니다.
 . type-aliases-package는 위에 Mapper에서 resultType을 단순히 Home만 적기 위해 필요합니다. 여기서 선언하지 않을 경우, 아까 말씀드렸듯이 위에서 Fully 클래스 이름을 써주시면 됩니다.(mapper와 같은 패턴 매칭은 사용할 수 없습니다.)


3. HomeMapper.java 파일은 아래와 같이 쿼리를 삭제 해줍니다.
package com.cusonar.example.home.mapper;

import org.apache.ibatis.annotations.Mapper;
import com.cusonar.example.home.domain.Home;

@Mapper
public interface HomeMapper {
	public Home readHome(String name);
}

4. 실행 후, http://localhost:8080/cusonar에 접속해봅니다. 잘되죠?

 

5. 수동으로 MyBatis의 Configure 파일을 사용하실 경우에는 application.properties에서 아래와 같이 선언한 후 MyBatis Config XML 파일을 작성하시면 됩니다.

mybatis.config-location=mybatis/MyBatisConfig.xml

     . 참고로 MyBatisConfig.xml 파일의 DTD는 아래와 같습니다.

 

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 


MyBatis의 경우 심도깊에 하려면 그 양이 어마어마 합니다. Config 부터 mapper에도 많은 것들이 있으니깐요.
위에서 mapper-location의 경우에는 패턴 매칭이 되지만 type-alias는 패턴 매칭이 되지 않습니다. 이게 참 귀찮습니다. domain을 한 패키지에 몰아 넣으면 하나만 쓰면 되지만 각 domain이 다른 패키지에 있다면 콤마를 써서 모두 입력해줘야 합니다. resource 파일의 경우 PathMatchingResourcePatternResolver 클래스를 활용해서 모든 리소스를 가져올 수 있지만(mapper처럼) 패키지의 경우는 패턴에 맞는것을 가져오는 API를 아직 못찾았네요. 일단 MybatisAutoConfiguration 클래스에서는 패턴 매칭을 지원하지 않습니다. (자동설정이 어떻게 되있는지 궁금하신 분은 아무 Java 파일에서 MyBatisAutoConfiguration을 입력하고, Ctrl + 클릭하면 해당 클래스로 이동할 수 있습니다.) domain도 패턴 매칭할 수 있는 방법은 좀더 알아봐야겠네요. (갑자기 어려운 말...)

저도 초보이고, 초보분들이 이 글을 보실거라고 생각하기에 여기서 MyBatis는 마무리하겠습니다. 향후 진행하다보면 더 자세히 설명해야될 날이 올지도 모르겠네요.

 

 

'Java > Spring Boot' 카테고리의 다른 글

5. Spring Boot Security 2편 - Custom Login  (4) 2016.06.08
4. Spring Boot Security 시작하기  (0) 2016.06.08
2. MyBatis로 MySQL 연동해보기  (0) 2016.06.04
1. @PathVariable 활용해보기  (0) 2016.06.04
0. Spring Boot 시작하기  (2) 2016.06.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함