[Spring] 게시판 만들기

·2023년 12월 4일
0

Spring

목록 보기
9/9
post-thumbnail

1. Build Path 수정

https://velog.io/@seoul788/Spring-maven-%EC%84%9C%EB%B2%84-%EC%8B%A4%ED%96%89%EC%8B%9C%ED%82%A4%EA%B8%B0

참고하여 build path 수정하기

수정 리스트

  • library
  • compiler
  • project facets
  • pom.xml

2. pom.xml 추가

리스트

  • 오라클 등록
  • jdbc 등록
  • mybatis 등록
  • mybatis spring 등록
		1. 오라클 등록
		<!-- oracle -->
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc8</artifactId>
			<version>18.0.0</version>
		</dependency>   
		
       2. jdbc 등록
		<!-- jdbc -->		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
        3. mybatis 등록
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.2.3</version>
		</dependency>
		
        4. mybatis spring 등록
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>1.2.2</version>
		</dependency>
        
        5. 서블릿 버전 바꿔 주기
        <!-- Servlet -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>3.1.0</version>
		    <scope>provided</scope>
		</dependency>

https://velog.io/@seoul788/Spring-maven-%EC%84%9C%EB%B2%84-%EC%8B%A4%ED%96%89%EC%8B%9C%ED%82%A4%EA%B8%B0#-%EC%84%9C%EB%B8%94%EB%A6%BF-%EB%B2%84%EC%A0%84-%EB%B0%94%EA%BF%94-%EC%A3%BC%EA%B8%B0
참고해서 재작성하기

3. webapp/web-inf/root-context.xml 추가

	// 1. jdbc 등록
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
		<property name="username" value="fin01" />
		<property name="password" value="fin01" />
	</bean>	
	
    // 2. sqlSessionFactory 등록
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="typeAliasesPackage" value="com.kgitbank.board.dto"/>
		<property name="mapperLocations" value="classpath:com/kgitbank/board/mapper/*.xml"/>
	</bean>
	
    // 4. sql 세션 등록
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
	</bean>	

4. servlet-context.xml 에 멀티 파트 리졸버 등록

	<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <beans:property name="maxUploadSize" value="10485760" />
   </beans:bean>

5. MVC 패턴 구축

(1) Model : boardMapper.xml / BoardMapper.java

📍 boardMapper.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="member.mybatis.memberMapper"> 

	<select id="checkMember" parameterType="map" resultType="memberDTO">
		select * from member where ssn1=#{ssn1} and ssn2=#{ssn2}
	</select>

	<insert id="insertMember" parameterType="memberDTO">
		insert into member values (member_seq.nextval, #{name},#{id},#{passwd},#{ssn1},#{ssn2},#{email},#{hp1},#{hp2},#{hp3}, sysdate)
	</insert>
	
	<select id="listMember" resultType="memberDTO">
		select * from member
	</select>
	
	<delete id="deleteMember" parameterType="int">
		delete from member where no = #{no}
	</delete>

	<select id="getMemberNo" parameterType="int" resultType="memberDTO">
		select * from member where no = #{no}
	</select>
	
	<update id="updateMember" parameterType="memberDTO">
		update member set passwd=#{passwd}, email=#{email}, hp1=#{hp1}, hp2=#{hp2}, hp3=#{hp3} where no = #{no}
	</update>
	
	<select id="findMember" parameterType="map" resultType="memberDTO">
		select * from member where ${search} like '%'||#{searchString}||'%'
	</select>
	
	<select id="searchMember" parameterType="map" resultType="memberDTO">
		select * from member where name=#{name} and ssn1=#{ssn1} and ssn2=#{ssn2}
		 <if test="id != null">
		 	and id=#{id}
		 </if>
	</select>
	
	<select id="getMemberId" parameterType="String" resultType="memberDTO">
		select * from member where id = #{id}
	</select>
	
</mapper>

📍 BaordMapper.java

package com.kgitbank.board.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.kgitbank.board.dto.BoardDTO;


@Service
public class BoardMapper {
	@Autowired
	private SqlSession sqlSession;
	
	public List<BoardDTO> listBoard(int start, int end) {
		Map<String, Object> params = new HashMap<>();
		params.put("start", start);
		params.put("end", end);
		return sqlSession.selectList("listBoard", params);
	}
	
	public int getCount() {
		return sqlSession.selectOne("getCount");
	}
	
	public int insertBoard(BoardDTO dto) {
		if (dto.getNum() == 0) {
			sqlSession.update("newContent");
		}else {
			sqlSession.update("oldContent", dto.getRe_step());
			dto.setRe_step(dto.getRe_step() + 1);
			dto.setRe_level(dto.getRe_level() + 1);
		}
		return sqlSession.insert("insertBoard", dto);
	}
	
	public void plusReadcount(int num) {
		sqlSession.update("plusReadcount", num);
	}
	
	public BoardDTO getBoard(int num, String mode) {
		if (mode.equals("content")) plusReadcount(num);
		return sqlSession.selectOne("getBoard", num);
	}
	
	protected boolean isPassword(int num, String passwd) {
		BoardDTO dto = getBoard(num, passwd);
		if (dto.getPasswd().equals(passwd)) {
			return true;
		}
		return false;
	}
	
	public int deleteBoard(int num, String passwd) {
		if (isPassword(num, passwd)) {
			return sqlSession.delete("deleteBoard", num);
		}
		return -1;
	}
	
	public int updateBoard(BoardDTO dto) {
		if (isPassword(dto.getNum(), dto.getPasswd())) {
			return sqlSession.update("updateBoard", dto);
		}
		return -1;
	}
	
	public List<BoardDTO> findBoard(String search, String searchString) {
		Map<String, String> params = new HashMap<>();
		params.put("search", search);
		params.put("searchString", searchString);
		return sqlSession.selectList("findBoard", params);
	}
	
}

⭐ 중요한 것

@service 어노테이션 붙여서 dao 인 것 알려 주기

(2) Views

jsp 파일들을 넣어 준다

(3) Controller

package com.kgitbank.board;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.kgitbank.board.dto.BoardDTO;
import com.kgitbank.board.service.BoardMapper;

@Controller
public class BoardController {
	@Autowired
	private BoardMapper boardMapper;
	/*
	@RequestMapping(value= {"/", "list_board.do"}, method = RequestMethod.GET)
	public String homeBoard() {
		return "redirect:list_board.do";
		}
	*/
	
	@RequestMapping(value="/")
	public String index() {
		return "index";
	}
	
	@RequestMapping(value="list_board.do")
	public String listBoard(HttpServletRequest req, 
										@RequestParam(required=false) String pageNum) {
		int pageSize = 5;
		if (pageNum == null) pageNum = "1";
		int currentPage = (Integer.parseInt(pageNum));
		int start = (currentPage-1) * pageSize + 1;
		int end = start + pageSize - 1;
		int count = boardMapper.getCount();
		if (end > count) end = count;
		// List<BoardDTO> list = boardDAO.listBoard(startRow,  endRow);
		List<BoardDTO> list = boardMapper.listBoard(start, end);
		req.setAttribute("listBoard", list);
		int number = count - start + 1;
		int pageBlock = 3;
		int pageCount = count/pageSize + (count%pageSize == 0 ? 0 : 1);
		int startPage = (currentPage-1)/pageBlock * pageBlock + 1;
		int endPage = startPage + pageBlock - 1;
		if (endPage > pageCount) endPage = pageCount;
		req.setAttribute("number", number);
		req.setAttribute("count", count);
		req.setAttribute("pageBlock", pageBlock);
		req.setAttribute("pageCount", pageCount);
		req.setAttribute("startPage", startPage);
		req.setAttribute("endPage", endPage);
		
		return "board/list";
	}
	
	@RequestMapping(value="/writeForm_board.do", method=RequestMethod.GET)
	public String writeForm_board() {
		return "board/writeForm";
	}
	
	@RequestMapping(value="/writePro_board.do", method=RequestMethod.POST)
	public String writePro_board(HttpServletRequest req, 
								@ModelAttribute BoardDTO dto, BindingResult result) {
		if (result.hasErrors()) {
			dto.setNum(0);
			dto.setRe_step(0);
			dto.setRe_level(0);
		}
		dto.setIp(req.getRemoteAddr());
		int res = boardMapper.insertBoard(dto);
		if (res>0) {
			req.setAttribute("msg", "게시글 등록 성공!! 게시글 목록 페이지로 이동합니다.");
			req.setAttribute("url", "list_board.do");
		}else {
			req.setAttribute("msg", "게시글 등록 실패!! 게시글 등록 페이지로 이동합니다.");
			req.setAttribute("url", "writeForm_board.do");
		}
		return "message";
	}
	
	
	@RequestMapping("/content_board.do")
	public String content_board(HttpServletRequest req, int num) {
		BoardDTO dto = boardMapper.getBoard(num, "content");
		req.setAttribute("getBoard", dto);
		return "board/content";
	}
	
	@RequestMapping(value="/delete_board.do", method=RequestMethod.GET)
	public String deleteForm_board() {
		return "board/deleteForm";
	}
	
	@RequestMapping(value="/deletePro_board.do", method=RequestMethod.POST)
	public String deletePro_board(HttpServletRequest req, 
										@RequestParam Map<String, String> params) {
		int res = boardMapper.deleteBoard
						(Integer.parseInt(params.get("num")), params.get("passwd"));
		if (res>0) {
			req.setAttribute("msg", "게시글 삭제 성공!! 게시글 목록 페이지로 이동합니다.");
			req.setAttribute("url", "list_board.do");
		}else if (res<0){
			req.setAttribute("msg", "비밀번호가 틀렸습니다. 다시 입력해 주세요");
			req.setAttribute("url", "content_board.do?num="+params.get("num"));
		}else {
			req.setAttribute("msg", "게시글 삭제 실패!! 게시글 보기 페이지로 이동합니다.");
			req.setAttribute("url", "content_board.do?num="+params.get("num"));
		}
		return "message";
	}

	@RequestMapping(value="/update_board.do", method=RequestMethod.GET)
	public String updateForm_board(HttpServletRequest req, int num) {
		BoardDTO dto = boardMapper.getBoard(num, "update");
		req.setAttribute("getBoard", dto);
		return "board/updateForm";
	}
	
	@RequestMapping(value="/update_board.do", method=RequestMethod.POST)
	public String updatePro_board(HttpServletRequest req, BoardDTO dto) {
		int res = boardMapper.updateBoard(dto);
		if (res>0) {
			req.setAttribute("msg", "게시글 수정 성공!! 게시글 목록 페이지로 이동합니다.");
			req.setAttribute("url", "list_board.do");
		}else if (res<0){
			req.setAttribute("msg", "비밀번호가 틀렸습니다. 다시 입력해 주세요");
			req.setAttribute("url", "updateForm_board.do?num="+dto.getNum());
		}else {
			req.setAttribute("msg", "게시글 수정 실패!! 게시글 보기 페이지로 이동합니다.");
			req.setAttribute("url", "content_board.do?num="+dto.getNum());
		}
		return "message";	
	}

	@RequestMapping("/find_board.do")
	public String findBoard(HttpServletRequest req) {
		String search = req.getParameter("search");
		String searchString = req.getParameter("searchString");
		int pageSize = 5;
		String pageNum = req.getParameter("pageNum");
		if (pageNum == null) {
			pageNum = "1";
		}
		int currentPage = (Integer.parseInt(pageNum));
		int startRow = (currentPage-1) * pageSize + 1;
		int endRow = startRow + pageSize - 1;
		int count = 0;
		int number = 0;
		List<BoardDTO> list = null;

		if (search == null) {
			count = boardMapper.getCount();
			if (endRow > count) endRow = count;
			list = boardMapper.listBoard(startRow, endRow);
			number = count - startRow + 1; 
		}else {
			list = boardMapper.findBoard(search, searchString);
			number = count - startRow + 1; 
		}

		int pageBlock = 3;
		int pageCount = count/pageSize + (count%pageSize == 0 ? 0 : 1);
		int startPage = (currentPage-1)/pageBlock * pageBlock + 1;
		int endPage = startPage + pageBlock - 1;
		if (endPage > pageCount) endPage = pageCount;
		
		req.setAttribute("number", number);
		req.setAttribute("count", count);
		req.setAttribute("pageBlock", pageBlock);
		req.setAttribute("pageCount", pageCount);
		req.setAttribute("startPage", startPage);
		req.setAttribute("endPage", endPage);
		req.setAttribute("listBoard", list);
		
		return "board/list";
	}
}
profile
자바 백엔드 개발자 개인 위키

0개의 댓글