Spring

회원가입, 로그인, 게시판 백엔드 실습( 게시판 글쓰기 )

hojomu 2023. 4. 5. 15:35

게시판 글쓰기

 : 게시글을 데이터베이스에 추가할 수 있는 기능을 만들 것이다.

이 때 로그인한 아이디에 대한 정보를 게시글에 남긴다.

 

1. Controller

// 게시판 글쓰기 데이터 저장
	@RequestMapping(value="/write", method = RequestMethod.POST)
	public String writePost(BoardVO board) {
		System.out.println(board);
		bs.write(board);
		
		return "redirect:/board/list";
	}

 - BoardVO 객체에 게시판에 대한 정보를 담아서 데이터베이스에 저장할 것이다.

public class BoardVO {
	
	private int board_no;
	private String title;
	private String contents;
	private String id;
	private String created_time;
	private String updated_time;
	private int likes;
	private int counts;
    
    필드에 대한 getter, setter
    
}

 

2. Service, ServiceImpl

public interface BoardService {
// 게시판 글쓰기
	public void write(BoardVO board);
}
@Service
public class BoardServiceImpl implements BoardService{
	
	@Autowired
	BoardMapper bm;
	
	// 글쓰기
	public void write(BoardVO board) {
		bm.write(board);
	}
}

 

3. Mapper , Mapper.xml

public interface BoardMapper {
	// 글쓰기
	public void write(BoardVO board);
}
<?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="hjm.portfolio.mapper.BoardMapper">
  	<insert id="write">
  		<selectKey keyProperty="board_no" order="BEFORE" resultType="int">
  			select max(board_no)+1 board_no
  			from port_board
  		</selectKey>
  		
  		insert into port_board(board_no, title, contents, id)
  		values(#{board_no}, #{title}, #{contents}, #{id})
  	</insert>
  </mapper>

 - selectKey 태그를 이용해 board_no 라는 변수에 현재 존재하는 게시글 중 가장 높은 board_no에 1을 더한 값을 저장한다. ( 따라서 새로운 게시글을 작성하면 board_no가 가장 높은 값으로 저장된다 )

 

4. jsp

<body>

<%
	String id = (String)session.getAttribute("login");
%>

<h1>글쓰기</h1>

<form action="write" method="post">
제목 <input type="text" name="title"><br>
<textarea rows="40" cols="40" name="contents"></textarea>
<input type="hidden" name="id" value=<%= id %>>
<input type="submit" value="글쓰기">
</form>

</body>

 - form 태그에 현재 session에 저장돼있는 id 값을 함께 제출하기 위해 (String)session.getAttribute("login") 을 사용했다.

 

** textarea에 기입한 내용이 데이터베이스에 저장될 때 개행이 저장되지 않는다. 이 해결 방법을 찾아보자