코딩공부/Java Spring

[spring 실습] 게시판 만들기 - 글 쓰기 기능 만들기

integerJI 2020. 12. 28. 23:17

[spring 실습] 게시판 만들기 - 글 쓰기 기능 만들기


기본 설정

1. pom.xml 설정, java 1.8 버전 맞추기 : integer-ji.tistory.com/183

2. tomcat 8.5 연동, sts 한글 설정 : integer-ji.tistory.com/184

3. .gitignore 설정 하기 : integer-ji.tistory.com/185

4. git 연동 : integer-ji.tistory.com/186

5. Oracle 11g 연동, pom.xml 의존성 추가 : integer-ji.tistory.com/188

6. Oracle Mybatis 연동 : integer-ji.tistory.com/189

* MVC 패턴, package구조 : integer-ji.tistory.com/187

* Spring Legacy Project에 아무것도 없을 때 : integer-ji.tistory.com/232

 


해당 게시글은 integer-ji.tistory.com/189

 

[spring 기초]oracle mybatis 연동

[spring 기초] OracleDB 셋팅, DB 생성 및 테이블 생성  - 프로젝트 시작 전 개발환경 세팅 sts 3.9.11 : https://integer-ji.tistory.com/52 oracle 11g : https://integer-ji.tistory.com/55 java 1.8 :..

integer-ji.tistory.com

이후 이어서 진행 됩니다.

 

*.xml 쿼리문 추가하기

<insert id="insertProject">
	<selectKey resultType="int" keyProperty="proId" order="BEFORE">
		SELECT NVL(MAX(PRO_ID),0)+1 FROM TB_PROJECT
	</selectKey>  
		INSERT INTO TB_PROJECT (
			PRO_ID, 
			PRO_TITLE, 
			PRO_BODY, 
			PRO_DATE
		 ) VALUES (
			#{proId}, 
			#{proTitle}, 
			#{proBody},
			SYSDATE
		 )
</insert>

 

TB_PROJECT 테이블에 데이터를 추가하기 위해 insert문을 추가합니다.

 

"SELECT NVL(MAX(PRO_ID),0)+1 FROM TB_PROJECT"를 사용하여 PRO_ID의 값을 조회해 +1을 해주어

 

proId라는 Values로 넘겨줍니다.

 

나머지 TB_PROJECT에 필요한 값은 proTitle, proBody, SYSDATE으로 넘겨줍니다.

 

 

*DAO.java insert 추가

package com.project.service.dao;
import java.util.List;

import com.project.vo.ProjectVO;

public interface ProjectDAO {
	
	List<ProjectVO> selectProjectList() throws Exception;
	
	void insertProject(ProjectVO projectVO);
	
}

 

Tb_Project_SQL.xml에서 설정한 ID(Line 16)을 불러와 줍니다.

 

*.xml 파일을 읽어주는 설정은 root-context.xml에서 설정해 줍니다.

 

 

 

*Service.java, *ServiceImpl.java insert추가

package com.project.service;

import java.util.List;
import com.project.vo.ProjectVO;

public interface ProjectService {
	
	List<ProjectVO> selectProjectList() throws Exception;
	
	void insertProject(ProjectVO projectVO);

}

 

package com.project.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.project.service.ProjectService;
import com.project.service.dao.ProjectDAO;
import com.project.vo.ProjectVO;

@Service("projectService")
public class ProjectServiceImpl implements ProjectService {
	@Autowired
	private ProjectDAO projectMapper;

	@Override
	@Transactional
	public List<ProjectVO> selectProjectList() throws Exception {
		return projectMapper.selectProjectList();
	}	

	@Override
	public void insertProject(ProjectVO projectVO) {
		projectMapper.insertProject(projectVO);
	}
	
}

 

Dao에서 던저준 insert api를 Service에서 받아 줍니다.

 

 

*Controller.java 추가

...생략

	/**
	 * 게시판 등록폼
	 * @param projectVO
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/projectRegisterForm.do")
	public String projectRegisterForm(@ModelAttribute("projectVO") ProjectVO projectVO, Model model) throws Exception {

	    return "projectRegisterForm";
	}
	
	/**
	 * 글을 등록합니다.
	 * @return
	 */
	@RequestMapping(value = "/projectInsert.do")
	public String projectInsert(@ModelAttribute("projectVO") ProjectVO projectVO, Model model) {

		projectService.insertProject(projectVO);
		
		return "redirect:/projectList.do";
	}
	
...생략

 

글 쓰기를 하기 위하여 게시판 등록 폼을 호출하는 Api와 글을 등록할 Api 두개를 만들어 줍니다.

 

 

글 쓰기 From.jsp 추가

<!-- @@@ 매우 중요 @@@ -->
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- src/main/webapp/WEB-INF/view/projectRegisterForm.jsp -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"/>
<title>Home</title>
</head>
<body>
	<h1>Project Register</h1>
	<c:url var="insertUrl" value="/projectInsert.do" />
	<form:form commandName="projectVO" action="${insertUrl}" name="projectVO" method="post">
	<table>
	<tbody>
	<tr>
	   <th>제목</th>
	   <td><form:input path="proTitle" id="proTitle" size="20" maxlength="20" /></td>
	</tr>
	<tr>
	   <th>내용</th>
	   <td><form:textarea path="proBody" id="proBody" /></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="등록" /></td>
	</tr>
	</tbody>
	</table>
	</form:form>
</body>
</html>

 

글 쓰기를 눌러 이동할 From을 만들어 줍니다.

 

Line 1. pageEncoding, charset를 utf-8로 설정 안해주면 oracle에 등록할때 한글이 등록이 안됩니다.

 

꼭 설정해 주세요.

 

이제 From에 있는 내용은 projectInsert.do를 호출합니다.

 

 

Test

 

글 쓰기 페이지로 진입 할 <a href="projectRegisterForm.do">글 쓰기</a> Url을 만들어 줍니다.

 

 

Home으로 다시 돌아가며 글 작성이 잘 되었습니다.

 

참고 GitHub : github.com/integerJI/spring.git