스프링부트 Mybatis 연동을 위해 먼저 이전 포스팅의 4번과 같이 Mybatis Framework 의존 설정을 먼저 해주세요.
1. application.properties 코드 작성 (Mybatis 설정)
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
spring.mvc.static-path-pattern=/resources/**
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
mybatis.type-aliases-package=com.example.demo.mapper // Mapper.java 파일이 위치한 경로
mybatis.mapper-locations=mybatis/**/*.xml // Mapper.xml 파일이 위치한 경로
Mybatis 설정을 위해 위 코드 맨 아래 두 줄만 추가해주면 됩니다.
프로젝트 내 해당 경로에 있는 파일은 아래 그림과 같습니다.
(**Mapper.java, **Mapper.xml)

2. **Mapper.java 생성 및 코드 작성 (DAO 인터페이스 작성)
package com.example.demo.mapper;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface TestMapper {
List<HashMap<Object, Object>> selectAll(HashMap<Object, Object> vo);
}
@Repository, @Mapper 어노테이션을 붙여줍니다.
selectAll()의 인자와 반환형은 잠시 후 설명하겠습니다.
3. **Mapper.xml 생성 및 코드 작성 (쿼리 작성)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.TestMapper">
<select id="selectAll" parameterType="hashMap" resultType="hashMap">
SELECT
*
FROM
users
WHERE
1=1
<if test="region != null">
AND region = #{region}
</if>
</select>
</mapper>
쿼리 작성은 스프링에서 Mybatis 쿼리 작성과 유사합니다.
위 코드에서 if test에 있는 region은 파라미터 hashMap의 key 이고, 내용에 있는 #{region}은 value 입니다.
4. **Service.java 생성 및 코드 작성 (Service 클래스 작성)
package com.example.demo.service;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.demo.mapper.TestMapper;
@Service
@Transactional
public class TestService {
@Autowired
private TestMapper mapper;
public List<HashMap<Object, Object>> selectAll(HashMap<Object, Object> vo) {
return mapper.selectAll(vo);
}
}
@Service, @Transactional 어노테이션을 붙여줍니다.
5. **Controller.java 생성 및 코드 작성 (Controller 클래스 작성)
package com.example.demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.service.TestService;
@Controller
public class TestController {
@Autowired
private TestService service;
@RequestMapping(value="/", produces = "application/text; charset=utf8")
public String main() {
try {
HashMap<Object, Object> parameterMap = new HashMap<Object, Object>();
parameterMap.put("region", "서울");
List<HashMap<Object, Object>> selectList = service.selectAll(parameterMap);
for (HashMap<Object, Object> rowMap : selectList) {
for( Entry<Object, Object> rowEntry : rowMap.entrySet() ){
Object key = rowEntry.getKey();
Object value = rowEntry.getValue();
System.out.print( String.format(key + ":"+value + " ") );
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "index";
}
}
selectAll() 메소드는 HashMap을 인자로 받고 HashMap을 원소로 하는 List를 반환합니다.
즉, 쿼리에서 조건절에 사용할 값을 HashMap에 put()하고 selectAll()을 통해 전달하면
쿼리 결과의 각 필드명은 HashMap의 key가 되고, 해당하는 값은 value가 되는 HashMap List를 반환합니다.
여기서 List는 쿼리 결과의 ROW라고 생각하면 됩니다.
위 코드의 이중 반복문을 통해 쿼리의 결과를 확인할 수 있습니다.
