MyBatis 사용 간한한 방명록 예제
; jdbc, MVC 모델 사용 예제와 비교해 보면 상당히 간단해 졌다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="write.html">글등록</a><br/>
<a href="board.do?cmd=list">글목록</a><br/>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="board.do?cmd=write">
작성자<input type="text" name="writer"/><br/>
이메일<input type="text" name="email"/><br/>
제목<input type="text" name="title"/><br/>
내용<br/>
<textarea rows="5" cols="50" name="content"></textarea><br/>
<input type="submit" value="등록"/>
</form>
</body>
</html>
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>방명록</h1>
<table border="1" width="600">
<tr>
<th>글번호</th>
<th>작성자</th>
<th>이메일</th>
<th>제목</th>
<th>작성일</th>
<th colspan="2"></th>
</tr>
<c:forEach var="vo" items="${list }">
<tr>
<td>${vo.num }</td>
<td>${vo.writer }</td>
<td>${vo.email }</td>
<td>${vo.title }</td>
<td>${vo.w_date }</td>
<td><a href="javascript:location.href='board.do?cmd=detail&num=${ vo.num }'">상세보기</a></td>
<td><a href="javascript:location.href='board.do?cmd=delete&num=${ vo.num }'">글삭제</a></td>
</tr>
</c:forEach>
</table>
<a href="write.html"><input type="button" value="입력"></a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="board.do?cmd=update">
번호 <input type="text" name="num" value="${ vo.num }" disabled />
<input type="hidden" name="num" value="${ vo.num }" />
<br/>
작성자<input type="text" name="writer" value="${ vo.writer }"/><br/>
이메일<input type="text" name="email" value="${ vo.email }"/><br/>
제목<input type="text" name="title" value="${ vo.title }"/><br/>
내용<br/>
<textarea rows="5" cols="50" name="content">${ vo.content }</textarea><br/>
<input type="submit" name="btnupdate" value="수정"/>
<input type="button" name="btnlist" value="목록" onclick="javascript:location.href='board.do?cmd=list'"/>
</form>
</body>
</html>
(5) SqlSessionFactoryService.java
package test.orm;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionFactoryService {
private static SqlSessionFactory sqlSessionFactory;
static{
try{
InputStream is = Resources.getResourceAsStream("test/orm/mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
<?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>
<typeAliases>
<typeAlias type="test.vo.BoardVo" alias="board" />
<!-- <typeAlias type="java.lang.Integer" alias="int"/> -->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="test/orm/BoardMapper.xml" />
</mappers>
</configuration>
<?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="test.orm.BoardMapper">
<insert id="add" parameterType="board">
insert into board values(board_seq.nextval,#{writer},#{email},#{title},#{content},sysdate)
</insert>
<delete id="delete" parameterType="int">
delete from board where num=#{num}
</delete>
<update id="update" parameterType="board">
update board set writer=#{writer},email=#{email},title=#{title},content=#{content} where num=#{num}
</update>
<select id="getlist" resultType="board">
select * from board order by num desc
</select>
<select id="find" parameterType="int" resultType="board">
select * from board where num=#{num}
</select>
</mapper>
package test.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import test.dao.BoardDao;
import test.vo.BoardVo;
@WebServlet("/board.do")
public class BoardController extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String cmd = request.getParameter("cmd");
if(cmd.equals("write")){
write(request, response);
}else if(cmd.equals("list")){
list(request, response);
}else if(cmd.equals("delete")){
delete(request, response);
}else if(cmd.equals("update")){
update(request, response);
}else if(cmd.equals("detail")){
detail(request, response);
}
}
public void delete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String num=request.getParameter("num");
BoardDao dao=new BoardDao();
int n = dao.delete(Integer.parseInt(num));
if (n>0){
list(request, response);
}
}
public void update(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String num=request.getParameter("num");
String writer=request.getParameter("writer");
String email=request.getParameter("email");
String title=request.getParameter("title");
String content=request.getParameter("content");
BoardVo vo=new BoardVo(Integer.parseInt(num), writer, email, title, content,null);
BoardDao dao=new BoardDao();
int n = dao.update(vo);
if(n>0){
list(request, response);
}
}
public void detail(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String num=request.getParameter("num");
BoardDao dao=new BoardDao();
BoardVo vo = dao.deatil(Integer.parseInt(num));
if ( vo != null){
request.setAttribute("vo", vo);
request.getRequestDispatcher("/detail.jsp").forward(request, response);
}else{
response.sendRedirect("error.jsp");
}
}
public void write(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//전송된 데이터를 얻어오기
String writer=request.getParameter("writer");
String email=request.getParameter("email");
String title=request.getParameter("title");
String content=request.getParameter("content");
BoardVo vo=new BoardVo(0, writer, email, title, content,null);
//데이터를 db에 저장하기
BoardDao dao=new BoardDao();
int n=dao.insert(vo);
//뷰페이지로 이동하기
if(n>0){
response.sendRedirect("board.do?cmd=list");
}else{
response.sendRedirect("error.jsp");
}
}
public void list(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BoardDao dao = new BoardDao();
List<BoardVo> list = dao.getList();
if(list != null){
request.setAttribute("list", list);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}else{
response.sendRedirect("error.jsp");
}
}
}
package test.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import test.orm.SqlSessionFactoryService;
import test.vo.BoardVo;
public class BoardDao {
private SqlSessionFactory sqlSessionFactory;
public BoardDao() {
sqlSessionFactory = SqlSessionFactoryService.getSqlSessionFactory();
}
public int delete(int num){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
int n = session.delete("delete", num);
session.commit();
return n;
} finally {
if (session != null)
session.close();
}
}
public int update(BoardVo vo){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
int n = session.update("update", vo);
session.commit();
return n;
} finally {
if (session != null)
session.close();
}
}
public int insert(BoardVo vo) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
int n = session.insert("add", vo);
session.commit();
return n;
} finally {
if (session != null)
session.close();
}
}
public List<BoardVo> getList() {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
return session.selectList("getlist");
} finally {
if (session != null)
session.close();
}
}
public BoardVo deatil(int num) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
BoardVo vo = session.selectOne("find",num);
return vo;
} finally {
if (session != null)
session.close();
}
}
}
package test.vo;
import java.sql.Date;
public class BoardVo {
private int num;
private String writer;
private String email;
private String title;
private String content;
private Date w_date;
public BoardVo(){}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public BoardVo(int num, String writer, String email, String title,
String content, Date w_date) {
super();
this.num = num;
this.writer = writer;
this.email = email;
this.title = title;
this.content = content;
this.w_date = w_date;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getW_date() {
return w_date;
}
public void setW_date(Date w_date) {
this.w_date = w_date;
}
}