[Spring] 입력정보 return 하기

1. 목적

신규 가입자 정보를 입력 -> DB 추가 -> 생성된 ID로 return -> 클라이언트 화면에 출력


2. 조건

  • 입력 form 으로 value -> DB에 추가
  • @ModelAttribute로 parameter를 받는다.
  • generatedkeys 사용
  • thymeleaf로 return

클라이언트 리턴


3. 코드

3-1. Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/realtor")
@Controller
public class realtorController {


  @Autowired
  private realtorBO realtorBO;


  @RequestMapping("/add-realtor")
  public String addRealtor() {
    return "realtor/addRealtor";
  }


  @PostMapping("/after-add-realtor")
  public String afterAddRealtor(
      @ModelAttribute realtor realtor,
      Model model) {
    
    realtor = realtorBO.addRealtor(realtor); //  get value -> realtor에 저장
    
    model.addAttribute("realtor", realtor); // DB에서 데이터를 꺼내 출력해주기 위해 model에 DTO 저장
    
    return "realtor/afterAddRealtor"; // return html path
  }
}

3-2. BO

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class realtorBO {

  @Autowired
  private realtorMapper realtorMapper;


  public realtor addRealtor(realtor realtor) {
    realtorMapper.addRealtor(realtor);
    return realtorMapper.selectRealtor(realtor.getId()); // keyProperty="id" get
  }
}

3-3. Mapper

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface realtorMapper {

  public void addRealtor(realtor realtor);


  public realtor selectRealtor(int id);
}

3-4. 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.example.realtor.realtorMapper">
  <insert id="addRealtor" parameterType="com.example.realtor.realtor" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO `realtor`
    (
      `office`
      ,`phoneNumber`
      ,`address`
      ,`grade`
      ,`createdAt`
      ,`updatedAt`
    )
    VALUES
    (
      #{office}
      ,#{phoneNumber}
      ,#{address}
      ,#{grade}
      ,NOW()
      ,NOW()
    )
  </insert>


  <select id="selectRealtor" parameterType="int" resultType="com.example.realtor.realtor">
    SELECT
      `id`
      ,`office`
      ,`phoneNumber`
      ,`address`
      ,`grade`
      ,`createdAt`
      ,`updatedAt`
    FROM
      `realtor`
    WHERE
      `id` = #{id}
  </select>
</mapper>

3-5. view

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="ko">
  <head>
    <meta charset="utf-8">
    <title>Add Realtor</title>
    <!-- bootstrap -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
  </head>
  <body>
    <div class="container">
      <h1>공인중개사 추가</h1>
      <form method="post" action="/realtor/after-add-realtor">
        <div>
          <label>상호명</label>
          <input type="text" id="office" name="office" class="form-control col-6">
        </div>
        <div>
          <label>전화번호</label>
          <input type="text" id="phoneNumber" name="phoneNumber" class="form-control col-6">
        </div>
        <div>
          <label>주소</label>
          <input type="text" id="address" name="address" class="form-control col-6">
        </div>
        <div>
          <label>등급</label>
          <input type="text" id="grade" name="grade" class="form-control col-6">
        </div>
        
        <input type="submit" value="추가" class="btn btn-primary">
      </form>
    </div>
  </body>
</html>

3-6. return

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="ko">
  <head>
    <meta charset="utf-8">
    <title>New Realtor</title>
    <!-- bootstrap -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
  </head>
  <body>
    <div class="container">
      <h1>공인중개사 정보</h1>
      <table class="table">
        <tr>
          <th>ID</th>
          <td th:text="${realtor.id}"></td>
        </tr>
        <tr>
          <th>상호명</th>
          <td th:text="${realtor.office}"></td>
        </tr>
        <tr>
          <th>전화번호</th>
          <td th:text="${realtor.phoneNumber}"></td>
        </tr>
        <tr>
          <th>주소</th>
          <td th:text="${realtor.address}"></td>
        </tr>
        <tr>
          <th>등급</th>
          <td th:text="${realtor.grade}"></td>
        </tr>
      </table>
    </div>
  </body>
</html>

4. 흐름도

클라 -> controller -> BO -> mapper -> repository (xml) -> DB -> repository -> mapper -> BO -> controller -> model -> view -> 클라 (DTO 형태로 데이터 전달)

MVC

Categories:

Updated:

Leave a comment