ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Boot] MyBatis
    Spring/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="입력">&nbsp;&nbsp;
    		<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="수정">&nbsp;&nbsp;
    		<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

    댓글

Designed by Tistory.