BackEnd/Spring
[Spring] 게시판 등록 폼 기본 순서 정리(Feat. Builder 메소드 체이닝)
ryuneng
2025. 1. 17. 12:22
반응형
1. list.jsp
- /WEB-INF/views/dept/list.jsp에 신규 부서 등록폼 페이지를 요청하는
<a>
링크 추가
<div class="row mb-3">
<div class="col-12">
<div class="text-end">
<a href="create" class="btn btn-primary">신규 부서</a>
</div>
</div>
</div>
2. Controller.java
- GET 방식의 http://localhost/dept/create 요청에 매핑되는 요청핸들러 메서드 정의하기
- 요청핸들러 메서드에서는 /WEB-INF/views/dept/form.jsp로 내부이동시키는 문자열 반환
@GetMapping("/create")
public String form(Model model) {
return "dept/form";
}
3. form.jsp
- 신규 부서 입력 폼 작성
(부서명, 부서연락처, 팩스번호를 입력하는 입력필드 추가)
<form class="border bg-light p-3" method="post" action="create">
<div class="form-group mb-3">
<label class="form-label">부서명</label>
<input type="text" class="form-control" name="name" />
</div>
<div class="form-group mb-3">
<label class="form-label">부서연락처</label>
<input type="text" class="form-control" name="tel" />
</div>
<div class="form-group mb-3">
<label class="form-label">팩스번호</label>
<input type="text" class="form-control" name="fax" />
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary">등록</button>
</div>
</form>
4. Form 클래스 작성
- com.sample.web.form 패키지에서 신규부서 등록폼에서 입력한 정보를 전달받는 DeptCreateForm .java 클래스 정의
@Getter
@Setter
@ToString
public class DeptCreateForm {
// form클래스에는 입력화면에 있는 변수만 있어야 함. -> no는 없어야 함
private String name;
private String tel;
private String fax;
}
/* 날짜 형식은 아래처럼 정의
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hireDate;
*/
5. Controller
- POST 방식의 http://localhost/deptd/add 요청에 매핑되는 요청핸들러 메서드를 정의
- 신규부서 등록화면에서 입력한 모든 입력값을 DeptCreateForm객체로 전달받기
@PostMapping("/create")
public String create(DeptCreateForm deptCreateForm) {
hrService.createDept(deptCreateForm);
return "redirect:list";
}
6. Service
- HrService에 DeptCreateForm 객체를 전달받아서 신규부서로 등록하기
public void createDept(DeptCreateForm form) {
Dept dept = Dept.builder()
.name(form.getName())
.tel(form.getTel())
.fax(form.getFax())
.build();
deptMapper.insertDept(dept);
}
7. Mapper interface
- DeptMapper에 신규부서정보를 전달받아서 저장시키는 추상메서드 작성
void insertDept(Dept dept);
8. XML
- Depts.xml에 신규부서정보를 전달받아서 저장시키는 SQL 작성
<insert id="insertDept" parameterType="com.sample.vo.Dept">
insert into shop_depts
values
(depts_seq.nextval, #{name}, #{tel}, #{fax})
</insert>
🚩 Tip.
- Service에서 메서드 정의 시, Form클래스에 객체를 set해주는 메서드를 만들어두면
Builder의 메서드 체이닝으로 길게 작성하지 않고 해당 메서드만 호출하면 간단하게 작성 가능
- Builder의 메서드 체이닝 방법
(Service의 코드가 길어짐)
- Form 클래스
@Getter
@Setter
@ToString
public class EmpCreateForm {
private String name;
private String tel;
private String email;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hireDate;
private int salary;
private int deptNo;
}
- Service
public void createEmp(EmpCreateForm form) {
// 등록 폼에서 부서번호 조회하기 위해 필요
Dept dept = Dept.builder()
.no(form.getDeptNo())
.build();
// 빌더가 모든 생성자를 알아서 만들어줌
Employee emp = Employee.builder()
.name(form.getName())
.tel(form.getTel())
.email(form.getEmail())
.salary(form.getSalary())
.hireDate(form.getHireDate())
.dept(dept)
.build();
empMapper.insertEmp(emp);
}
2. Form클래스에 정의한 메서드 호출 방법
(Service 코드 단 한 줄)
- Form 클래스
@Getter
@Setter
@ToString
public class EmpCreateForm {
private String name;
private String tel;
private String email;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hireDate;
private int salary;
private int deptNo;
// 객체를 set해주는 메서드 정의
public Employee toEmp() {
Employee emp = new Employee();
emp.setName(name);
emp.setTel(tel);
emp.setEmail(email);
emp.setSalary(salary);
emp.setHireDate(hireDate);
Dept dept = new Dept();
dept.setNo(deptNo);
emp.setDept(dept);
return emp;
}
}
- Service
public void createEmp(EmpCreateForm form) {
// Form클래스 메서드 호출
Employee emp = form.toEmp();
empMapper.insertEmp(emp);
}
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-게시판-글등록-순서