MyBatis

현서·2025년 6월 16일
1

자바

목록 보기
32/32

MyBatis

Java 애플리케이션에서 SQL을 XML 또는 어노테이션으로 관리하면서 SQL 결과를 자바 객체에 매핑해주는 ORM 프레임워크

동작 원리
1. SqlSessionFactory 생성
2. SqlSession 열기
3. Mapper에서 SQL 실행
4. 결과를 자바 객체로 매핑
5. SqlSession 닫기

MyBatis 시작하기


저번에 올렸던 mvc2 프로젝트에 게시판 기능을 구현했다..

mybatis-config.xml

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/java?useUnicode=true&amp;charactorEncoding=UTF-8&amp;serverTimezone=Asia/Seoul"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/board-mapper.xml"/>
        <mapper resource="mapper/comment-mapper.xml"/>
    </mappers>
</configuration>

mysql에 board 테이블 생성

create table board (
	idx int primary key auto_increment,
    title varchar(500) not null,
    content text not null,
    user_id varchar(20) not null,
    regdate datetime default now(),
    view_count int default 0
);

MyBatisUtil.java

package com.koreait.mvc2.mybatis;

import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

pom.xml dependencies 안에 다음 내용 추가

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.15</version>
</dependency>

<!-- MyBatis-SQLSessionFactory 연동 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>

list.jsp (게시판 목록)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>게시판 목록</title>
</head>
<body>
<h2>게시판</h2>
<p><a href="write.board">[글쓰기]</a></p>
<table border="1" width="100%">
  <tr>
    <th>번호</th>
    <th>제목</th>
    <th>작성자</th>
    <th>조회수</th>
    <th>작성일</th>
  </tr>
  <c:forEach var="board" items="${boardList}">
  <tr>
    <td>${board.idx}</td>
    <td><a href="detail.board?idx=${board.idx}">${board.title}</a></td>
    <td>${board.userId}</td>
    <td>${board.viewCount}</td>
    <td>${board.regDate}</td>
  </tr>
  </c:forEach>
</table>
<%--페이지네이션--%>
<c:forEach begin="1" end="${totalPage}" var="i">
<a href="list.board?page=${i}">[${i}]</a>
</c:forEach>
</body>
</html>

write.jsp (글쓰기)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>글쓰기</title>
</head>
<body>
<h2>글쓰기</h2>
<form method="post" action="writeForm.board">
    <p>제목: <input type="text" name="title"></p>
    <p>내용: <textarea name="content" rows="5" cols="50"></textarea></p>
    <p><button type="submit">작성하기</button></p>
</form>
<p><a href="list.board">목록</a></p>
</body>
</html>

edit.jsp (글 수정하기)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>글수정</title>
</head>
<body>
<h2>글수정</h2>
<form method="post" action="editForm.board">
    <input type="hidden" name="idx" value="${board.idx}">
    <p>제목: <input type="text" name="title" value="${board.title}"></p>
    <p>내용: <textarea name="content" rows="5" cols="50">${board.content}</textarea></p>
    <p><button type="submit">수정하기</button></p>
</form>
<p><a href="list.board">목록</a></p>
</body>
</html>

detail.jsp (글 상세보기)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>글 상세</title>
</head>
<body>
<h2>${board.title}</h2>
<p>작성자: ${board.userId} | 조회수: ${board.viewCount} | 작성일: ${board.regDate}</p>
<hr>
<p>${board.content}</p>
<hr>
<a href="edit.board?idx=${board.idx}">수정</a>
<a href="delete.board?idx=${board.idx}">삭제</a>
<a href="list.board">목록</a>
<hr>
<%--댓글 목록 영역--%>
<h3>댓글 작성</h3>
<form method="post" action="write.comment">
    <input type="hidden" name="board_idx" value="${board.idx}">
    <p><input type="text" name="user_id" value="${user.userid}" readonly>:
    <input type="text" name="content" placeholder="댓글 내용을 입력하세요" required>
    <button type="submit">댓글 등록</button></p>
</form>
<hr>
<c:forEach var="comment" items="${commentList}">
<div>
    <strong>${comment.userId}: ${comment.content} </strong>
    (${comment.regDate})
    <form method="post" action="updateForm.comment" style="display: inline">
        <input type="hidden" name="idx" value="${comment.idx}">
        <input type="hidden" name="board_idx" value="${board.idx}">
        <input type="hidden" name="user_id" value="${comment.userId}">
        <input type="text" name="content" value="${comment.content}">
        <button type="submit">수정</button>
    </form>
    <form method="post" action="deleteForm.comment" style="display: inline">
        <input type="hidden" name="idx" value="${comment.idx}">
        <input type="hidden" name="board_idx" value="${board.idx}">
        <input type="hidden" name="user_id" value="${comment.userId}">
        <button type="submit">삭제</button>
    </form>
</div>
</c:forEach>
</body>
</html>

BoardController.java

package com.koreait.mvc2.controller;

import com.koreait.mvc2.service.BoardService;
import com.koreait.mvc2.service.BoardServiceImpl;

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 java.io.IOException;

@WebServlet("*.board")
public class BoardController extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private BoardService service = new BoardServiceImpl();

    public BoardController() {}

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doAction(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doAction(req, resp);
    }

    protected void doAction(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String uri = req.getRequestURI();
        String context = req.getContextPath();
        String command = uri.substring(context.length());

        switch (command) {
            case "/list.board":
                service.list(req, resp);
                break;
            case "/write.board":
                req.getRequestDispatcher("/WEB-INF/views/board/write.jsp").forward(req, resp);
                break;
            case "/writeForm.board":
                service.write(req, resp);
                break;
            case "/detail.board":
                service.detail(req, resp);
                break;
            case "/edit.board":
                service.edit(req, resp);
                break;
            case "/editForm.board":
                service.editForm(req, resp);
                break;
            case "/delete.board":
                service.delete(req, resp);
                break;
            default:
                resp.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
    }
}

BoardService.java

package com.koreait.mvc2.service;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface BoardService {
    void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void write(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void detail(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void editForm(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}

BoardServiceImpl.java

package com.koreait.mvc2.service;

import com.koreait.mvc2.dao.BoardDAO;
import com.koreait.mvc2.dao.CommentDAO;
import com.koreait.mvc2.dto.BoardDTO;
import com.koreait.mvc2.dto.CommentDTO;
import com.koreait.mvc2.dto.MemberDTO;
import com.koreait.mvc2.mybatis.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BoardServiceImpl implements BoardService {
    @Override
    public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int page = 1;
        int pageSize = 10;
        if (req.getParameter("page")!=null){
            page = Integer.parseInt(req.getParameter("page"));
        }
        int start = (page - 1) * pageSize; // start는 DB에서 데이터를 몇 번째 행부터 가져올지 계산하는 값

        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)){
            BoardDAO dao = new BoardDAO(sqlSession);
            Map<String, Object> paramMap = new HashMap<>();
            paramMap.put("start", start);
            paramMap.put("pageSize", pageSize);

            List<BoardDTO> list = dao.getBoardList(paramMap);
            int totalCount = dao.getTotalCount();
            int totalPage = (int) Math.ceil ((double) totalCount / (double) pageSize);
            req.setAttribute("boardList", list);
            req.setAttribute("currentPage", page);
            req.setAttribute("totalPage", totalPage);
            req.getRequestDispatcher("/WEB-INF/views/board/list.jsp").forward(req, resp);
        }
    }

    @Override
    public void write(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        MemberDTO sessionUser = (MemberDTO) session.getAttribute("user");
        if (sessionUser == null) {
            resp.sendRedirect("login.member");
            return;
        }
        String writer = sessionUser.getUserid();
        String title = req.getParameter("title");
        String content = req.getParameter("content");
        BoardDTO dto = new BoardDTO();
        dto.setTitle(title);
        dto.setContent(content);
        dto.setUserId(writer);

        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)) {
            BoardDAO dao = new BoardDAO(sqlSession);
            dao.insertBoard(dto);
        }
        resp.sendRedirect("list.board");
    }

    @Override
    public void detail(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));

        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)) {
            BoardDAO dao = new BoardDAO(sqlSession);
            CommentDAO commentDAO = new CommentDAO(sqlSession);

            BoardDTO board = dao.getBoard(idx);
            List<CommentDTO> commentList = commentDAO.getCommentsByBoardIdx(idx);

            dao.increaseViewCount(idx);
            req.setAttribute("board", board);
            req.setAttribute("commentList", commentList);

            RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/views/board/detail.jsp");
            rd.forward(req, resp);
        }catch(Exception e) {
            e.printStackTrace();
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }

    @Override
    public void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));
        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)) {
            BoardDTO dto = new BoardDAO(sqlSession).getBoard(idx);
            req.setAttribute("board", dto);
            RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/views/board/edit.jsp");
            rd.forward(req, resp);
        }catch (Exception e){
            e.printStackTrace();
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }

    @Override
    public void editForm(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));
        String title = req.getParameter("title");
        String content = req.getParameter("content");

        BoardDTO dto = new BoardDTO();
        dto.setIdx(idx);
        dto.setTitle(title);
        dto.setContent(content);

        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)) {
            new BoardDAO(sqlSession).updateBoard(dto);
            resp.sendRedirect("detail.board?idx=" + idx);
        }
    }

    @Override
    public void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));
        try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)) {
            new BoardDAO(sqlSession).deleteBoard(idx);
            resp.sendRedirect("list.board");
        }
    }
}

BoardDAO.java

package com.koreait.mvc2.dao;

import com.koreait.mvc2.dto.BoardDTO;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.Map;

public class BoardDAO {
    private final SqlSession sqlSession;

    public BoardDAO(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public void insertBoard(BoardDTO dto){
        sqlSession.insert("board.insertBoard", dto);
    }

    public List<BoardDTO> getBoardList(Map<String, Object> paramMap){
        return sqlSession.selectList("board.getBoardList", paramMap);
    }

    public int getTotalCount(){
        return sqlSession.selectOne("board.getTotalCount");
    }

    public BoardDTO getBoard(int idx) {
        return sqlSession.selectOne("board.getBoard", idx);
    }

    public void increaseViewCount(int idx){
        sqlSession.update("board.increaseViewCount", idx);
    }

    public void updateBoard(BoardDTO dto){
        sqlSession.update("board.updateBoard", dto);
    }

    public void deleteBoard(int idx){
        sqlSession.delete("board.deleteBoard", idx);
    }
}

board-mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="board">
    <resultMap id="BoardResultMap" type="com.koreait.mvc2.dto.BoardDTO">
        <id property="idx" column="idx"/>
        <result property="title" column="title"/>
        <result property="content" column="content"/>
        <result property="userId" column="user_id"/>
        <result property="regDate" column="regdate"/>
        <result property="viewCount" column="view_count"/>
    </resultMap>

    <insert id="insertBoard" parameterType="com.koreait.mvc2.dto.BoardDTO">
        insert into board (user_id, title, content) values (#{userId}, #{title}, #{content})
    </insert>

    <select id="getBoardList" parameterType="map" resultType="com.koreait.mvc2.dto.BoardDTO">
        select
        idx, title, content, user_id as userId, regdate as regDate, view_count as viewCount from board
        order by idx desc
        limit #{start}, #{pageSize}
    </select>

    <select id="getTotalCount" resultType="int">
        select count(idx) from board
    </select>

    <select id="getBoard" resultMap="BoardResultMap" parameterType="int">
        select * from board where idx = #{idx}
    </select>

    <update id="increaseViewCount" parameterType="int">
        update board set view_count = view_count + 1 where idx=#{idx}
    </update>

    <update id="updateBoard" parameterType="com.koreait.mvc2.dto.BoardDTO">
        update board set title=#{title}, content=#{content} where idx=#{idx}
    </update>

    <delete id="deleteBoard" parameterType="int">
        delete from board where idx=#{idx}
    </delete>
</mapper>

BoardDTO.java

package com.koreait.mvc2.dto;

import java.sql.Timestamp;

public class BoardDTO {
    private int idx;
    private String title;
    private String content;
    private String userId;
    private Timestamp regDate;
    private int viewCount;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public int getIdx() {
        return idx;
    }

    public void setIdx(int idx) {
        this.idx = idx;
    }

    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 Timestamp getRegDate() {
        return regDate;
    }

    public void setRegDate(Timestamp regDate) {
        this.regDate = regDate;
    }

    public int getViewCount() {
        return viewCount;
    }

    public void setViewCount(int viewCount) {
        this.viewCount = viewCount;
    }
}

댓글 기능!

CommentController.java

package com.koreait.mvc2.controller;

import com.koreait.mvc2.dao.BoardDAO;
import com.koreait.mvc2.dao.CommentDAO;
import com.koreait.mvc2.dto.BoardDTO;
import com.koreait.mvc2.dto.CommentDTO;
import com.koreait.mvc2.dto.MemberDTO;
import com.koreait.mvc2.mybatis.MyBatisUtil;
import com.koreait.mvc2.service.CommentService;
import com.koreait.mvc2.service.CommentServiceImpl;
import org.apache.ibatis.session.SqlSession;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("*.comment")
public class CommentController extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private CommentService service = new CommentServiceImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doAction(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doAction(req, resp);
    }

    protected void doAction(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String uri = req.getRequestURI();
        String context = req.getContextPath();
        String command = uri.substring(context.length());

        switch(command){
            case "/write.comment":
                service.write(req, resp);
                break;
            case "/updateForm.comment":
                service.update(req, resp);
                break;
            case "/deleteForm.comment":
                service.delete(req, resp);
                break;
            default:
                resp.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
    }
}

CommentService.java

package com.koreait.mvc2.service;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface CommentService {
    void write(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
    void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}

CommentServiceImpl.java

package com.koreait.mvc2.service;

import com.koreait.mvc2.dao.CommentDAO;
import com.koreait.mvc2.dto.CommentDTO;
import com.koreait.mvc2.dto.MemberDTO;
import com.koreait.mvc2.mybatis.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class CommentServiceImpl implements CommentService{
    @Override
    public void write(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        HttpSession session = req.getSession();
        MemberDTO loginUser = (MemberDTO) session.getAttribute("user");
        if(loginUser == null){
            resp.sendRedirect("login.member");
            return;
        }
        String writer = loginUser.getUserid();
        int boardIdx = Integer.parseInt(req.getParameter("board_idx"));
        String content = req.getParameter("content");
        CommentDTO dto = new CommentDTO();
        dto.setBoardIdx(boardIdx);
        dto.setUserId(writer);
        dto.setContent(content);

        try(SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)){
            new CommentDAO(sqlSession).insertComment(dto);
        }
        resp.sendRedirect("detail.board?idx=" + boardIdx);
    }

    @Override
    public void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));
        int boardIdx = Integer.parseInt(req.getParameter("board_idx"));
        String user_id = req.getParameter("user_id");
        String content = req.getParameter("content");
        CommentDTO dto = new CommentDTO();
        dto.setIdx(idx);
        dto.setBoardIdx(boardIdx);
        dto.setUserId(user_id);
        dto.setContent(content);
        try(SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)){
            new CommentDAO(sqlSession).updateComment(dto);
        }
        resp.sendRedirect("detail.board?idx=" + boardIdx);
    }

    @Override
    public void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int idx = Integer.parseInt(req.getParameter("idx"));
        int boardIdx = Integer.parseInt(req.getParameter("board_idx"));
        String user_id = req.getParameter("user_id");
        CommentDTO dto = new CommentDTO();
        dto.setIdx(idx);
        dto.setBoardIdx(boardIdx);
        dto.setUserId(user_id);
        try(SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(true)){
            new CommentDAO(sqlSession).deleteComment(dto);
        }
        resp.sendRedirect("detail.board?idx=" + boardIdx);
    }
}

CommentDAO.java

package com.koreait.mvc2.dao;

import com.koreait.mvc2.dto.BoardDTO;
import com.koreait.mvc2.dto.CommentDTO;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class CommentDAO {
    private final SqlSession sqlSession;

    public CommentDAO(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public void insertComment(CommentDTO dto){
        sqlSession.insert("comment.insertComment", dto);
    }

    public List<CommentDTO> getCommentsByBoardIdx(int boardIdx){
        return sqlSession.selectList("comment.getCommentsByBoardIdx", boardIdx);
    }

    public void updateComment(CommentDTO dto) {sqlSession.update("comment.updateComment", dto);}

    public void deleteComment(CommentDTO dto) {sqlSession.delete("comment.deleteComment", dto);}
}

comment-mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="comment">
    <insert id="insertComment" parameterType="com.koreait.mvc2.dto.CommentDTO">
        insert into commentt (board_idx, user_id, content) values (#{boardIdx}, #{userId}, #{content})
    </insert>

    <select id="getCommentsByBoardIdx" parameterType="int" resultType="com.koreait.mvc2.dto.CommentDTO">
        select idx, user_id as userId, content, regdate as regDate from commentt where board_idx=#{boardIdx} order by idx desc;
    </select>

    <update id="updateComment" parameterType="com.koreait.mvc2.dto.CommentDTO">
        update commentt set content=#{content} where idx=#{idx} and user_id=#{userId}
    </update>

    <delete id="deleteComment" parameterType="com.koreait.mvc2.dto.CommentDTO">
        delete from commentt where idx=#{idx} and user_id=#{userId}
    </delete>
</mapper>

CommentDTO.java

package com.koreait.mvc2.dto;

public class CommentDTO {
    private int idx;
    private int boardIdx;
    private String userId;
    private String content;
    private String regDate;

    public int getIdx() {
        return idx;
    }

    public void setIdx(int idx) {
        this.idx = idx;
    }

    public int getBoardIdx() {
        return boardIdx;
    }

    public void setBoardIdx(int boardIdx) {
        this.boardIdx = boardIdx;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getRegDate() {
        return regDate;
    }

    public void setRegDate(String regDate) {
        this.regDate = regDate;
    }
}

폴더 구조

profile
The light shines in the darkness.

0개의 댓글