Spring MyBatis 3 example
Spring, MyBatis 3 Integration example
테스트 환경
Windows 7, JDK 1.7, Spring 3.2, MyBatis 3.2, Eclipse luna, STS, Maven, Tomcat 8
Spring 에서 MyBatis 를 사용하기 위한 라이브러리
http://mvnrepository.com 에서 mybatis, mybatis spring 으로 검색하면 된다
MyBatis 에 대한 보다 상세한 예제는 다른 페이지를 참조하세요
pom.xml 의 일부내용
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.5</version>
</dependency>
WEB-INF/spring/servlet-context.xml
<context:component-scan base-package="org.kdea.mybatis" />
...........
.........
<beans:bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
<beans:property name="dataSourceName" value="ds"/>
<beans:property name="URL" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<beans:property name="user" value="scott"/>
<beans:property name="password" value="TIGER"/>
</beans:bean>
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="mapperLocations" value="classpath*:org/kdea/**/*.xml"/>
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<beans:constructor-arg index="0" ref="sqlSessionFactory"/>
</beans:bean>
여러개의 폴더에 xml 설정파일이 있는 경우에는 위의 설정(value="classpath*:org/kdea/**/*.xml")과 같이 ** 을 사용하여 org.kdea 하위의 모든 패키지에 xml 파일을 두고 참조할 수 있게 된다
org.kdea.mybatis.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="list" resultType="org.kdea.mybatis.EmpVO">
select * from emp2
</select>
<insert id="insert" parameterType="org.kdea.mybatis.EmpVO">
insert into emp2 (empno, ename, deptno, job, sal)
values ( #{empno}, #{ename}, #{deptno}, #{job}, #{sal} )
</insert>
<select id="info" resultType="org.kdea.mybatis.EmpVO">
select * from emp2 where empno=#{empno}
</select>
<select id="find" resultType="org.kdea.mybatis.EmpVO">
SELECT * FROM emp2 WHERE empno=#{empno} AND deptno=#{deptno}
</select
<update id="update" parameterType="org.kdea.mybatis.EmpVO">
update emp2 set deptno=#{deptno}, sal=#{sal} where empno=#{empno}
</update>
<delete id="delete" >
delete from emp2 where empno=#{empno}
</delete>
</mapper>
org.kdea.mybatis.EmpDAO.java
package org.kdea.mybatis;
import java.util.List;
public interface EmpDAO {
public List<EmpVO> list();
public EmpVO info(int empno);
public EmpVO find(@Param("empno")int empno, @Param("deptno")int deptno);
public int insert(EmpVO emp);
public int update(EmpVO emp);
public int delete(int empno);
}
org.kdea.mybatis.EmpVO.java
package org.kdea.mybatis;
public class EmpVO {
private int empno;
private String ename;
private String job;
private int deptno;
private int sal;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
}
org.kdea.mybatis.EmpMBController.java
package org.kdea.mybatis;
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.*;
@Controller
@RequestMapping("/mb/")
public class EmpMBController {
@Autowired
private SqlSessionTemplate sqlSessionTemplate; // 설정파일에 빈으로 등록되었기 때문에 생성자나 Setter 없이 자동으로 주입
@RequestMapping("empList")
public String getEmpList(Model model) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
List<EmpVO> list = dao.list();
model.addAttribute("empList", list);
return "mb/empList";
}
@RequestMapping("empInfo")
public String getEmp(Model model, @RequestParam int empno) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
EmpVO emp = dao.info(empno);
model.addAttribute("empInfo", emp);
return "mb/empInfo";
}
@RequestMapping(value="empInputForm", method=RequestMethod.GET)
public String empInputForm(EmpVO emp) {
return "/mb/empInputForm";
}
@RequestMapping(value="empInsert", method=RequestMethod.POST)
public String empInsert(EmpVO emp) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
int n = dao.insert(emp);
return "redirect:/mb/empList";
}
@RequestMapping("empEdit")
public String empEdit(Model model, @RequestParam int empno) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
EmpVO emp = dao.info(empno);
model.addAttribute("empInfo", emp);
return "/mb/empEdit";
}
@RequestMapping("empUpdate")
public String empUpdate(Model model, EmpVO emp) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
int n = dao.update(emp);
model.addAttribute("empno", emp.getEmpno());
return "redirect:/mb/empInfo";
}
@RequestMapping("empDelete")
public String empDelete(@RequestParam int empno) {
EmpDAO dao = sqlSessionTemplate.getMapper(EmpDAO.class);
int n = dao.delete(empno);
return "redirect:/mb/empList";
}
}
WEB-INF/views/mb/empList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사원정보 리스트</title>
</head>
<body>
<h2>사원정보 리스트</h2>
<c:forEach var="e" items="${empList}" >
${e.empno}
<a href="empInfo?empno=${e.empno}"> ${e.ename} </a>
${e.deptno} ${e.job} ${e.sal} <br>
</c:forEach>
<p>
<a href="empInputForm">사원정보 추가</a>
</body>
</html>
WEB-INF/views/mb/empInfo.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE htm>
<html>
<head>
<meta charset="EUC-KR">
<title>사원정보 상세 페이지</title>
<script type="text/javascript">
function empDelete(empno){
if(confirm('정말로 사원정보를 삭제하시겠어요?')) {
location.href='empDelete?empno='+empno;
}
}
</script>
</head>
<body>
<h2>사원정보 상세 페이지</h2>
사번 ${empInfo.empno } <br>
이름 ${empInfo.ename } <br>
부서 ${empInfo.deptno } <br>
직무 ${empInfo.job } <br>
급여 ${empInfo.sal } <br>
<p>
<a href="empEdit?empno=${empInfo.empno}">사원정보 수정</a>
<a href="javascript:empDelete(${empInfo.empno})">사원정보 삭제</a>
</body>
</html>
WEB-INF/views/mb/empInputForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사원정보 입력 폼</title>
<style>
body {
font-size: 20px;
color: teal;
}
td {
font-size: 15px;
color: black;
width: 100px;
height: 22px;
text-align: left;
}
.heading {
font-size: 18px;
color: white;
font: bold;
background-color: orange;
border: thick;
}
</style>
</head>
<body>
<h2>사원정보 입력 폼 </h2>
<div>
<form:form method="post" action="empInsert" modelAttribute="empVO">
<table>
<tr>
<td>EMPNO :</td>
<td><form:input path="empno" /></td>
</tr>
<tr>
<td>ENAME :</td>
<td><form:input path="ename" /></td>
</tr>
<tr>
<td>DEPTNO :</td>
<td><form:input path="deptno"/></td>
</tr>
<tr>
<td>JOB :</td>
<td><form:input path="job" /></td>
</tr>
<tr>
<td>SAL :</td>
<td><form:input path="sal" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Save" /></td>
</tr>
<tr>
<td colspan="2"><a href="list">사원정보 리스트 보기</a></td>
</tr>
</table>
</form:form>
</div>
</body>
</html>
WEB-INF/views/mb/empEdit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE htm>
<html>
<head>
<meta charset="UTF-8">
<title>사원정보 수정 페이지</title>
</head>
<body>
<h2>사원정보 수정 페이지</h2>
<form:form method="post" action="empUpdate" modelAttribute="empInfo">
<form:hidden path="empno"/>
사번 ${empInfo.empno } <br>
이름 ${empInfo.ename } <br>
부서 <form:input path="deptno"/> <br>
직무 ${empInfo.job } <br>
급여 <form:input path="sal"/> <br>
<p>
<input type="submit" value="변경사항 적용">
</form:form>
</body>
</html>