-
[Mybatis] 마이바티스로 INSERT, UPDATE, DELETE 하는 방법º Server º/MyBatis 2023. 9. 19. 23:33
INSERT, UPDATE, DELETE
- UPDATE, INSERT, DELETE 추가하기 위해 공식사이트에서 기본적으로 제공해주는 코드를 추가해줍니다.
- mybatis 공식사이트 : https://mybatis.org/
<insert id="insertAuthor"> insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio}) </insert> <update id="updateAuthor"> update Author set username = #{username}, password = #{password}, email = #{email}, bio = #{bio} where id = #{id} </update> <delete id="deleteAuthor"> delete from Author where id = #{id} </delete>
mybatis
mybatis.org
도서를 예시로 추가, 수정, 삭제하는 것을 더하여 작성해보도록 하겠습니다.
1. bookMapper.xml 파일에 추가, 수정, 삭제 mapper를 설정합니다.
<?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="Book"> <!-- 조회하기 --> <select id="findAll" resultType="bookVO"> select * from book order by bookied </select> <!-- 상세조회하기 --> <select id="findByBookied" resultType="bookVO"> select * from book where bookied = #{bookied} </select> <!--추가등록하기 --> <insert id="insert" parameterType="bookVO"> <!-- values에 ? 대신 VO의 변수로 작성해줍니다. --> insert into book(bookied,bookname,publisher,price) values(#{bookied},#{bookname},#{publisher},#{price}) </insert> <!-- 수정하기 --> <update id="update" parameterType="bookVO"> update book set bookname=#{bookname}, publisher=#{publisher}, price=#{price} where bookied=#{bookied} </update> <!-- 삭제하기 --> <delete id="delete" parameterType="bookVO"> delete book where bookied=#{bookied} </delete> </mapper>
2. DBManager.java 에 추가, 수정, 삭제 메소드를 추가합니다.
package com.example.demo.db; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.example.demo.vo.BookVO; public class DBManager { // 객체와 무관하게 어플리케이션이 생성될 때 누구나 쓸 수 잇도록 맴버변수로 지정함. public static SqlSessionFactory sqlSessionFactory; static { try { String resource = "com/example/demo/db/sqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (Exception e) { System.out.println("예외발생 DBManaget :"+e.getMessage()); } } // 객체 사용없이 메소드를 사용하기 위해 static 으로 사용합니다. public static List<BookVO> findAll(){ List<BookVO> list = null; //sqlSessionFactory를 통해 sqlsession을 유지함 SqlSession session = sqlSessionFactory.openSession(); // bookMapper.xml에 namespace와 id에 지정한 값을 가운데 '.'을 넣고 사용함 list = session.selectList("Book.findAll"); // session을 닫아줌 session.close(); return list; } public static BookVO findByBookied(int bookied) { BookVO b = null; SqlSession session = sqlSessionFactory.openSession(); b = session.selectOne("Book.findByBookied", bookied); session.close(); return b; } public static int insert(BookVO b) { int re = -1; //()안에 autocommit 'true' 빼먹으면 db에 반영이 안됩니다. SqlSession session = sqlSessionFactory.openSession(true); re = session.insert("Book.insert", b); session.close(); return re; } public static int update(BookVO b) { int re = -1; SqlSession session = sqlSessionFactory.openSession(true); re = session.update("Book.update", b); session.close(); return re; } public static int delete(int bookied) { int re = -1; SqlSession session = sqlSessionFactory.openSession(true); re = session.delete("Book.delete", bookied); session.close(); return re; } }
3. BookDAO (repository) 에도 추가, 수정, 삭제를 위한 메소드를 작성합니다.
package com.example.demo.dao; import java.util.List; import org.springframework.stereotype.Repository; import com.example.demo.db.DBManager; import com.example.demo.vo.BookVO; @Repository public class BookDAO { public static List<BookVO> findAll(){ //mybatis에 저장되어있는 메소드를 바로 return 하면 됩니다. return DBManager.findAll(); } public static BookVO findByBookied(int bookied) { return DBManager.findByBookied(bookied); } public static int insert(BookVO b) { return DBManager.insert(b); } public static int update(BookVO b) { return DBManager.update(b); } public static int delete(int bookied) { return DBManager.delete(bookied); } }
4. JSP 페이지 이동 및 상태유지, PostMapping을 위해 추가, 수정, 삭제 컨트롤러를 추가로 작성합니다.
package com.example.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.example.demo.dao.BookDAO; import com.example.demo.vo.BookVO; @Controller public class BookController { @Autowired private BookDAO dao; public void setDao(BookDAO dao) { this.dao = dao; } @RequestMapping("/listBook") @ResponseBody public ModelAndView list() { ModelAndView mav = new ModelAndView("listBook"); mav.addObject("list",dao.findAll()); return mav; } @GetMapping("/detailBook") public void detail(Model model, int bookied) { model.addAttribute("b",dao.findByBookied(bookied)); } @GetMapping("/insertBook") public void insertForm () { } @PostMapping("/insertBook") public ModelAndView insertSumit(BookVO vo) { ModelAndView mav = new ModelAndView("redirect:/listBook"); int re = dao.insert(vo); return mav; } @GetMapping("/updateBook") public void updateForm(Model model, int bookied) { model.addAttribute("b",dao.findByBookied(bookied)); } @PostMapping("/updateBook") public ModelAndView updateSumit(BookVO vo) { ModelAndView mav = new ModelAndView("redirect:/listBook"); int re = dao.update(vo); return mav; } @GetMapping("/deleteBook") public ModelAndView deleteBook(int bookied) { ModelAndView mav = new ModelAndView("redirect:/listBook"); int re = dao.delete(bookied); if(re != 1) { mav.setViewName("error"); } return mav; } }
5. view를 위한 JSP 를 작성합니다.
- insert : 등록 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>도서등록</h2> <hr> <form action="insertBook" method="post"> 도서번호 : <input type="number" name="bookied" value="${b.bookied }"><br> 도서이름 : <input type="text" name="bookname"><br> 출판사명 : <input type="text" name="publisher"><br> 도서이름 : <input type="number" name="price"><br> <input type="submit" value="등록"> <input type="reset" value="다시입력"> </form> <a href="listBook">도서목록</a> </body> </html>
- selelct : 조회 목록 페이지
<%@ 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>Insert title here</title> </head> <body> <h2>도서목록</h2> <hr> <table border="1"> <tr> <th>도서번호</th> <th>도서이름</th> </tr> <c:forEach var="b" items="${list }"> <tr> <td>${b.bookied }</td> <td> <a href="detailBook?bookied=${b.bookied }">${b.bookname }</a> </td> </tr> </c:forEach> </table> <a href="insertBook">도서등록</a> </body> </html>
- delete & detail : 삭제 및 상세 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="https://code.jquery.com/jquery-3.7.0.min.js"></script> <script type="text/javascript"> $(function () { $("#delete").click(function () { if(confirm("정말로 삭제하시겠습니까?")){ location.href="detailBook?bookied=${b.bookied }"; }else{ return false; } }) }) </script> <title>Insert title here</title> </head> <body> <h2>상세조회</h2> <hr> 도서번호 : ${b.bookied }<br> 도서이름 : ${b.bookname }<br> 출판사명 : ${b.publisher }<br> 도서가격 : ${b.price }<br> <a href="updateBook?bookied=${b.bookied }">수정</a> <a href="deleteBook?bookied=${b.bookied }" id="delete">삭제</a> </body> </html>
- update : 수정 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>도서수정</h2> <hr> <form action="updateBook" method="post"> 도서번호 : <input type="number" name="bookied" value="${b.bookied }"><br> 도서이름 : <input type="text" name="bookname" value="${b.bookname }"><br> 출판사명 : <input type="text" name="publisher" value="${b.publisher }"><br> 도서이름 : <input type="number" name="price" value="${b.price }"><br> <input type="submit" value="수정"> <input type="reset" value="다시입력"> </form> <a href="listBook">도서목록</a> </body> </html>
위와 같은 코드로 마이바티스와 JSP 를 활용하여 추가, 수정, 삭제 기능을 수행할 수 있다.
'º Server º > MyBatis' 카테고리의 다른 글
[Spring Boot] 스프링 프레임워크 : Mybatis 개념 및 사용방법 (0) 2023.07.16