Spring, MyBatis 사용시 다수개의 파라미터를 SQL 문장에 전달하는 예
개요
MyBatis의 SQL 문장에 다수개의 파라미터를 전달하기 위해서는 다음과 같은 방법을 사용한다
1. 도메인 오브젝트를 정의하고 다수개의 속성에 값을 저장한 후에 오브젝트를 parameterType="Product" 처럼 설정한다
2. HashMap<String, Object> 을 사용하여 다수개의 기본형 데이터나 오브젝트 형을 혼합하여 함께 전달할 때는 parameterType="hashmap" 으로 설정한다
3. 위의 방법 대신에 MyBatis에서 지원하는 @Param Annotation을 사용한다 ( @Param("empno") int empno, @Param("deptno") int deptno )
여기서는 1, 2번째 방법 대신에 @Param 을 사용하여 Java 측에서 MyBatis 측의 SQL 문장에 다수개의 파라미터를 전달하는 예를 테스트하고자 한다
EmpDAO.java
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface EmpDAO {
....................
...........
public EmpVO getEmp(@Param("deptno") int deptno, @Param("ename") String ename);
}
EmpMapper.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="org.kdea.mybatis.EmpDAO"> <!--이 sql 문장과 매핑될 인터페이스의 완전한 경로-->
....................
...........
<select id="getEmp" resultType="org.kdea.mybatis.EmpVO">
<!-- parameterType 속성을 사용하지 않았으나 아래의 SQL문장 중에는 파라미터가 사용되고 있다-->
select empno,ename,job,deptno,sal
from emp2
where deptno=#{deptno} and ename=#{ename}
</select>
</mapper>
EmpMBController.java
package org.kdea.mybatis;
import java.util.HashMap;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/mb/")
public class EmpMBController {
@Autowired
private SqlSessionTemplate sqlSessionTemplate; // 설정파일에 빈으로 등록되었기 때문에 생성자나 Setter 없이 자동으로 주입
@RequestMapping("getEmp")
public ModelAndView getEmp(){
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
EmpVO vo = dao.getEmp(20, "SMITH");
ModelAndView mv = new ModelAndView("mb/empView","vo",vo);
return mv;
}
}
empView.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>사원정보 보기</title>
</head>
<body><p>
<h2>deptno, ename 으로 검색된 사원정보</h2>
${vo.empno } ${vo.ename} ${vo.deptno} ${vo.sal}
</body>
</html>