일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Self-invocation
- 개발자취업
- springboot
- 로컬이미지저장
- 로컬이미지불러오기
- jar빌드
- 단위테스트코드
- @Transactional
- 게시판 CRUD
- MySQL
- React.js
- 테스트코드작성
- 개발자취업후기
- 비전공자개발자
- 게시물상세
- jsp
- I/OStream
- jstl
- CRUD
- 게시판
- mybatis
- given when then
- JPAHibernate
- 로컬이미지삭제
- SpringBoot JPA
- React+JPA
- WebConfig
- 비전공개발자
- 게시물수정
- React+SpringBoot
- Today
- Total
인텔리가 '되고 싶은' 인텔리재이
[JSP + MyBatis] 5. 게시글 작성하기 (insert) 본문
🕶 참고 포스팅
이번 포스팅에서는 게시판 CRUD 중에서, 게시글 작성을 구현해보도록 하겠습니다!
화면 만들기
먼저, 게시글 작성에 필요한 화면을 만듭니다.
이전 포스팅에서 소개해드린 부트스트랩(Bootstrap)을 적용하여 간단히 화면을 구성해보도록 하겠습니다😀
저는 src > main > webapp > WEB-INF > views > board 폴더를 생성하고,
폴더 안에 insert.jsp를 생성 및 작성하였습니다.
insert.jsp
- 작성 버튼을 눌렀을때 form action인 /insertProc가 실행되며 데이터가 POST 형식으로 전달됩니다.
- 작성 완료시 리스트 화면으로 돌아가며, 작성된 내용을 확인할 수 있습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ include file="../include/style.jsp"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert Page</title>
</head>
<body>
<jsp:include page="../include/header.jsp"></jsp:include>
<h2 style="text-align: center">게시글 작성</h2>
<div class="container">
<form action="/insertProc" method="post" style="gap: 1rem">
<div class="form-group">
<label for="subject">제목</label> <input type="text"
class="form-control" id="subject" name="subject"
placeholder="제목을 입력하세요.">
</div>
<div class="form-group">
<label for="writer">작성자</label> <input type="text"
class="form-control" id="writer" name="writer"
placeholder="내용을 입력하세요.">
</div>
<div class="form-group">
<label for=content">내용</label>
<textarea class="form-control" id="content" name="content" rows="3" style="margin-bottom : 20px"></textarea>
</div>
<button type="submit" class="btn btn-primary">작성</button>
</form>
<jsp:include page="../include/footer.jsp"></jsp:include>
</div>
</body>
</html>
이전 게시물에서 생성한 Board 테이블 중 제목, 내용, 작성자명 항목을 화면에서 입력하고, DB에 저장할 예정입니다.
CREATE TABLE BOARD (
bno INT NOT NULL AUTO_INCREMENT, // 게시물 번호
subject VARCHAR(100) , // 제목
content VARCHAR(100), // 내용
writer VARCHAR(100) , // 작성자명
reg_date DATE , // 작성일자
PRIMARY KEY (bno));
프로젝트를 실행하고, 주소창에 localhost:포트번호/insert로 접속하면 다음과 같은 화면이 출력됩니다.😮
DB에 데이터 insert 해보기
본격적으로 DB에 데이터를 insert하기 위해, controller, domain, mapper, service에 코드를 추가하도록 하겠습니다.
src > main > java > com.example.demo 해당 경로에
controller, domain, mapper, service 패키지가 생성되어있는지 확인 후, 코드를 작성합니다.
1. domain > BoardVO.java
- VO(Value Object) 는 값을 위해 쓰이는 객체입니다.
- read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다.
저는 DB에 생성한 Board 테이블의 항목과 동일하게 VO를 작성하였습니다.
package com.example.demo.domain;
import java.util.Date;
public class BoardVO {
private int bno;
private String subject;
private String content;
private String writer;
private Date reg_date;
public int getBno() {
return bno;
}
public void setBno(int bno) {
this.bno = bno;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
2. controller > BoardController.java
- controller는 화면으로부터 데이터를 받아 VO에 담고, 이를 service로 값을 전달해주는 역할을 담당합니다.
- 이를 위해 service와의 의존성을 주입해주었습니다.
- 게시물 작성 화면을 호출하는 메소드와 게시물 작성 기능을 실제로 담당하는 메소드를 구분하여 작성합니다.
package com.example.demo.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.domain.BoardVO;
import com.example.demo.service.BoardService;
@Controller // 컨트롤러 빈으로 등록
public class BoardController {
@Resource(name = "com.example.demo.service.BoardService") // Service 의존성 주입
BoardService mBoardService;
@RequestMapping("/insert") // 게시글 작성폼 호출
private String boardInsertForm() {
return "board/insert";
}
@RequestMapping("/insertProc") // 게시글 작성 기능 동작
private String boardInsertProc(HttpServletRequest request) throws Exception {
BoardVO board = new BoardVO();
board.setSubject(request.getParameter("subject"));
board.setContent(request.getParameter("content"));
board.setWriter(request.getParameter("writer"));
mBoardService.boardInsertService(board);
return "redirect:/list";
}
}
3. service > BoardService.java
- Service는 Controller로부터 데이터를 받고, 이를 Mapper로 전달해주는 역할을 담당합니다.
- 이를 위해 Mapper와의 의존성을 주입해주었습니다.
- int 형이므로, 글이 작성되면 Mapper로부터 1을 전달받고, 작성되지 않았을때는 0이 전달됩니다.
package com.example.demo.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.example.demo.domain.BoardVO;
import com.example.demo.mapper.BoardMapper;
@Service("com.example.demo.service.BoardService")
public class BoardService {
// Mapper 의존성 주입
@Resource(name = "com.example.demo.mapper.BoardMapper")
BoardMapper mBoardMapper;
// 게시물 작성
public int boardInsertService(BoardVO board) throws Exception {
return mBoardMapper.boardInsert(board);
}
}
4. mapper > BoardMapper.java
- Mapper 인터페이스는 Service로부터 데이터를 받고, 직접 DB에 접근하여 데이터를 처리합니다.
- Mapper.xml 에 작성된 SQL 쿼리문을 자바 인터페이스를 통해 호출하여 처리합니다.
- int 형이므로, 글이 작성되면 DB로부터 1을 전달받고, 작성되지 않았을때는 0이 전달됩니다.
package com.example.demo.mapper;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.example.demo.domain.BoardVO;
//DB에 접근하는 클래스
@Repository("com.example.demo.mapper.BoardMapper")
public interface BoardMapper {
// 게시글 작성
public int boardInsert(BoardVO board) throws Exception;
}
5. mapper > BoardMapper.xml
- 이곳에 작성된 SQL 쿼리문을 자바 인터페이스를 통해 호출하여 DB에 반영합니다.
- id는 mapper에서 설정한 이름과 동일하게 작성합니다.
- parameterType은 전달받는 데이터의 형식을 의미합니다. 저는 BoardVO로 작성하였습니다.
- 게시물번호, 제목, 내용, 작성자명, 작성일자를 insert하고, 작성일자는 현재 날짜/시간의 now()로 작성하였습니다.
<?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.demo.mapper.BoardMapper">
<insert
id="boardInsert"
parameterType="com.example.demo.domain.BoardVO"
>
INSERT INTO
BOARD (BNO,SUBJECT,CONTENT,WRITER,REG_DATE)
VALUES(#{bno},#{subject},#{content},#{writer},now())
</insert>
</mapper>
코드 작성 후, 잘 동작하는지 확인합니다.
리스트 화면 및 DB에 데이터가 잘 반영되어 있는 것을 확인할 수 있습니다! 🤗
🎊 드디어 CRUD 중 insert 기능을 완료했습니다! 🎉
다음 포스팅에서는 리스트 화면을 만들고, 호출해보도록 하겠습니다😉
'✨LEVEL UP🎇 > PROJECT' 카테고리의 다른 글
[JSP + MyBatis] 7. 게시물 상세페이지 조회하기 (0) | 2023.03.24 |
---|---|
[JSP + MyBatis] 6. 게시물 리스트 + JSTL (1) | 2023.03.06 |
[JSP + MyBatis] 4. 화면에 부트스트랩(Bootstrap) 적용하기 (0) | 2023.01.27 |
[JSP + MyBatis] 3. MySQL DB 연동하기 (0) | 2023.01.25 |
[JSP + MyBatis] 2. 프로젝트 세팅 및 화면 출력해보기 (0) | 2023.01.25 |