-
[Boot] MyBatisSpring/Boot 2022. 9. 10. 21:06
\src\main\resources\application.properties
# Server port server.port=8070 # JSP spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp # Oracle spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe spring.datasource.username=scott spring.datasource.password=tiger # mybatis mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml
src\main\resources\mybatis\mapper\UserDao.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 = "com.ecl.g11.dao.IUserDao" > <!-- 이름 틀리면 오류남 --> </mapper>
DTO
package com.ecl.g11.dto; import lombok.Data; @Data public class UserDto { private String id; private String name; }
Controller
package com.ecl.g11.controller; 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 com.ecl.g11.dao.IUserDao; @Controller public class UserController { @Autowired IUserDao udao; @RequestMapping("/") public String root(Model model){ model.addAttribute("users", udao.getList()); return "userlist"; } }
Interface
package com.ecl.g11.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ecl.g11.dto.UserDto; @Mapper public interface IUserDao { public List<UserDto> getList(); }
src\main\resources\mybatis\mapper\UserDao.xml
SQL 문(아래 코드에서 select * from myuser에 해당)
1. IUserDao 의 이름과 그 안에 있는 getList 메서드 이름갖고, 현재 xml 파일에서 namespace에서는 IUserDao 라는 이름 검색, 안쪽 태그들에서는 getList 라는 id를 검색 .
2. 검색된 태그내의 SQL 문을 실행 .
3. 실행결과를 resulyType 에 적힌 자료형 형태로 리턴하되 메서드의 리턴형에 맞춰서 결과가 여러개이면 List 형태로, 단일데이터면 단일데이터 Dto형태로 자동 리턴해줌.
<?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 = "com.ecl.g11.dao.IUserDao" > <select id="getList" resultType = "com.ecl.g11.dto.UserDto"> select * from myuser </select> </mapper>
userlist.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>userlist.jsp</title> </head> <body> <h1><% out.println("MyBatis: UserList"); %></h1> <c:forEach var="dto" items="${users }"> <h1>${dto.id }/${dto.name }</h1> </c:forEach> </body> </html>
BORAD
DTO
package com.ecl.g12.dto; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import lombok.Data; @Data public class BbsDto { private int id; @NotNull(message="Writer is Null") @NotEmpty(message="Writer is Empty") private String writer; @NotNull (message="Title is Null") @NotEmpty (message="Title is Empty") private String title; @NotNull (message="Content is Null") @NotEmpty (message="Content is Empty") private String content; }
게시글 목록
Controller
package com.ecl.g12.controller; 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 com.ecl.g12.dao.IBbsDao; @Controller public class BbsController { @Autowired IBbsDao bdao; @RequestMapping("/") public String root(Model model){ model.addAttribute("list", bdao.getList()); return "list"; } 이 안에 추가될 코드 배경 - 줄무늬 }
interface
package com.ecl.g12.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ecl.g12.dto.BbsDto; @Mapper public interface IBbsDao { public List<BbsDto> getList(); }
src\main\resources\mybatis\mapper\BbsDao.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 = "com.ecl.g12.dao.IBbsDao" > <select id="getList" resultType = "com.ecl.g12.dto.BbsDto"> select * from bbs order by id desc </select> 이 안에 추가될 코드 배경 - 검정 </mapper>
list.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>list.jsp</title> </head> <body> <table width="500" cellpadding="0" cellspacing="0" border="1"> <tr> <th>번호</th><th>작성자</th><th>제목</th> <th>수정</th><th>삭제</th></tr> <c:forEach items="${list}" var="dto"> <tr> <td align="center">${dto.id}</td> <td align="center">${dto.writer}</td> <td><a href="view?id=${dto.id}">${dto.title}</a></td> <td align="center"> <a href="updateForm?id=${dto.id}">수정</a></td> <td align="center"> <a href="delete?id=${dto.id}">X</a></td> <tr> </c:forEach> </table> <p><a href="writeForm">글작성</a></p> </body> </html>
게시글 작성하기Controller
@RequestMapping("writeForm") public String writeForm(Model model) { return "writeForm"; }
writeForm.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>writeForm.jsp</title> </head> <body> <table width="700" cellpadding="0" cellspacing="0" border="1"> <form action="write" method="post"> <tr><td> 작성자 </td><td> <input type="text" name="writer" size = "100" value="${dto.writer}"> </td></tr> <tr><td> 제목 </td><td> <input type="text" name="title" size = "100" value="${dto.title}" > </td> </tr> <tr><td> 내용 </td><td> <input type="text" name="content" size = "100" value="${dto.content}"></td></tr> <tr><td colspan="2"> <input type="submit" value="입력"> <a href="list">목록보기</a></td></tr> <tr><td colspan="2">${msg }</td></tr> </form> </table> </body> </html>
Controller
@RequestMapping(value="/write", method=RequestMethod.POST ) public String write( @ModelAttribute("dto") @Valid BbsDto bbsdto, BindingResult result, Model model) { if(result.hasErrors()) { if(result.getFieldError("writer")!=null) model.addAttribute("msg",result.getFieldError("writer").getDefaultMessage()); else if(result.getFieldError("title")!=null) model.addAttribute("msg",result.getFieldError("title").getDefaultMessage()); else if(result.getFieldError("content")!=null) model.addAttribute("msg",result.getFieldError("content").getDefaultMessage()); return "writeForm"; } else { // bdao.write(bbsdto); bdao.write(bbsdto.getWriter(),bbsdto.getTitle(),bbsdto.getContent()); return "redirect:/"; } }
IBbsDao
public void write(String writer, String title, String content);
BbsDao.xml
<insert id="write"> insert into bbs(id, writer, title, content) values(bbs_seq.nextVal, #{param1}, #{param2}, #{param3}) </insert>
파라미터 한번에 보낼 때
@RequestMapping(value="/write", method=RequestMethod.POST ) public String write( @ModelAttribute("dto") @Valid BbsDto bbsdto, BindingResult result, Model model) { if(result.hasErrors()) { if(result.getFieldError("writer")!=null) model.addAttribute("msg",result.getFieldError("writer").getDefaultMessage()); else if(result.getFieldError("title")!=null) model.addAttribute("msg",result.getFieldError("title").getDefaultMessage()); else if(result.getFieldError("content")!=null) model.addAttribute("msg",result.getFieldError("content").getDefaultMessage()); return "writeForm"; } else { bdao.write(bbsdto); //bdao.write(bbsdto.getWriter(),bbsdto.getTitle(),bbsdto.getContent()); return "redirect:/"; } }
IBbsDao
// public void write(String writer, String title, String content); public void write(@Valid BbsDto bbsdto);
BbsDao.xml
<!-- <insert id="write"> insert into bbs(id, writer, title, content) values(bbs_seq.nextVal, #{param1}, #{param2}, #{param3}) </insert> --> <insert id="write" parameterType="com.ecl.g12.dto.BbsDto"> insert into bbs(id, writer, title, content) values(bbs_seq.nextVal, #{writer}, #{title}, #{content}) </insert>
게시글 상세보기Controller
@RequestMapping("view") public String view(Model model, @RequestParam("id") int id) { model.addAttribute("dto", bdao.view(id)); return "view"; }
IBbsDao
public BbsDto view(int id);
BbsDao.xml
<select id="view" resultType = "com.ecl.g12.dto.BbsDto"> select * from bbs where id=#{param1} </select>
view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>view.jsp</title> </head> <body> 내용보기 <br> <hr> 작성자 : ${dto.writer} <br> 제목 : ${dto.title} <br> 내용 : ${dto.content} <hr> <br><p> <a href="/">목록보기</a> </body> </html>
게시글 수정하기Controller
@RequestMapping("updateForm") public String updateForm(Model model, @RequestParam("id") int id) { model.addAttribute("dto", bdao.view(id)); return "updateForm"; }
updateForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>updateForm.jsp</title> </head> <body> <table width="500" cellpadding="0" cellspacing="0" border="1"> <form action="update" method="post"> <tr><td> 작성자 </td><td> <input type="text" name="writer" size = "100" value="${dto.writer}"> <input type="hidden" name="id" value="${dto.id}"></td></tr> <tr><td> 제목 </td><td> <input type="text" name="title" size = "100" value="${dto.title}" ></td></tr> <tr><td> 내용 </td><td> <input type="text" name="content" size = "100" value="${dto.content}"></td></tr> <tr><td colspan="2"> <input type="submit" value="수정"> <a href="/">목록보기</a></td></tr> <tr><td colspan="2">${msg }</td></tr> </form><br> </table> </body> </html>
Controller
@RequestMapping(value="/update", method=RequestMethod.POST) public String update( @ModelAttribute("dto") @Valid BbsDto bbsdto, BindingResult result, Model model) { if(result.hasErrors()) { if(result.getFieldError("writer")!=null) model.addAttribute("msg",result.getFieldError("writer").getDefaultMessage()); else if(result.getFieldError("title")!=null) model.addAttribute("msg",result.getFieldError("title").getDefaultMessage()); else if(result.getFieldError("content")!=null) model.addAttribute("msg",result.getFieldError("content").getDefaultMessage()); return "updateForm"; } else { bdao.update(bbsdto); return "redirect:/"; } }
IBbsDao
public void update(@Valid BbsDto bbsdto);
BbsDao.xml
<update id="update" parameterType="com.ecl.g12.dto.BbsDto"> update bbs set writer=#{writer}, title=#{title}, content=#{content} where id=#{id} </update>
수정 완료 게시글 삭제하기
Controller
@RequestMapping("delete") public String delete(Model model, @RequestParam("id") int id) { bdao.delete(id); return "redirect:/"; }
IBbsDao
public void delete(int id);
BbsDao.xml
<delete id="delete"> delete from bbs where id=#{param1} <!-- id=#{id}도 가능 --> </delete>
번호 5 삭제됨 'Spring > Boot' 카테고리의 다른 글
[Boot] Use procedure (0) 2022.09.10 [Boot] Transaction (0) 2022.09.10 [Boot] JDBC (0) 2022.09.10 [Boot] Validation (0) 2022.09.10 [Boot] Lombok (0) 2022.09.10