wasup
Spring Legacy MiNi Project - STS / board java 본문
반응형
1. 툴 다운로드
sts : ( https://spring.io/tools )
2. 미니 프로젝트
2-1. Spring Legacy MiNi Project
2-2. Spring Boot MiNi Project
2-3 eGov
Project Name : slp(spring legacy project) 회원관리, 게시판
개발환경
- window10
- tomcat8.5
- mysql 5.5
- java version 1.8.0_40
- sts3
- jdbc 3.2.3
- myBatis 3.2.8
개발언어
- java, spring, jsp
- jsjq
- html5, css3
STS3(Spring Tool Suite3)-spring legacy project
: 이전부터 사용되어온 주 시스템(core, bases)
: Spring Legacy Project는 STS3까지 지원
: STS4부터는 Spring Boot가 기본
: STS4에서 Spring Legacy Project를 사용하기 위해서는 지원 플러그인을 따로 설치해서 사용
참고 링크 - ( https://woopi1087.tistory.com/26 )
참고 링크 - ( https://developsd.tistory.com/68 )
게시판 흐름
* 리스트 -> '글쓰기', '글내용보기(상세)'으로 이동 가능
* 글 내용보기(상세) -> '글목록', '글수정', '답글작성', '글삭제'로 이동 가능
SQL
drop table board;
create table board(
num int not null primary key auto_increment,
writer varchar(30) not null,
subject varchar(40) not null,
content text not null,
pw varchar(15) not null,
reg_date datetime,
read_count int default 0,
re_group int not null,
re_step int not null,
re_depth int not null,
ip varchar(20) not null
);
desc board;
-- num 번호
-- writer 작성자
-- subject 제목
-- content 내용
-- pw 비밀번호
-- reg_date 작성일
-- hit 조회수
-- re_group 글 그룹(숫자)
-- re_step 글 순서(숫자)
-- re_depth 글 깊이
-- ip 아이피
src/main/resources/mybatis/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<typeAlias alias="memberDomain" type="com.mvc.pj.domain.MemberDTO"/>
<typeAlias alias="boardBasic" type="com.mvc.pj.domain.BoardDTO"/>
</typeAliases>
<mappers>
<mapper resource="/mybatis/member.xml"/>
<mapper resource="/mybatis/board.xml"/>
</mappers>
</configuration>
src/main/java/com.mvc.pj.domain.BoardDTO.java
: DTO, VO : 모델 빈
package com.mvc.pj.domain;
import java.sql.Date;
public class BoardDTO {
//전역변수:필드:프로퍼티:property
private int num;//번호
private String writer;//작성자
private String subject;//제목
private String content;//내용
private String pw;//비밀번호
private Date reg_date;//작성일
private int hit;//조회수
private int re_group;//글 그룹(숫자)
private int re_step;//글 순서(숫자)
private int re_depth;//글 깊이
private String ip;//아이피
public BoardDTO() {}//기본생성자
}
src/main/resources/mybatis/board.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="board">
<!-- 최대 글번호 얻기 -->
<select id="numMax" resultType="Integer">
select max(num)
from board
</select>
<!-- 답글 끼워넣기 위치확보 -->
<update id="reStep" parameterType="co.kr.Hello.BoardDTO">
update board set
re_step=re_step+1
where ref=#{ref} and re_step>#{re_step}
</update>
<!-- 글 쓰기, 답글쓰기 insert -->
<insert id="insertDao" parameterType="boardBasic">
insert into board
(writer,subject, content, pw, reg_date, re_group, re_step, re_depth, ip)
values(#{writer},#{subject},#{content},#{pw},NOW(),#{re_group},#{re_step},#{re_depth},#{ip})
</insert>
<!-- 글 갯수 -->
<select id="countDao" resultType="int">
select count(*) from board;
</select>
<!-- 리스트 -->
<select id="listDao" parameterType="java.util.Map"
resultType="com.mvc.pj.domain.BoardDAO">
select * from board order by re_group desc, re_step asc limit
#{start}, #{cnt}
</select>
<!-- 조회수 증가 -->
<update id="readcountDao" parameterType="Integer">
update board set
hit=hit+1 where num=#{num}
</update>
<!-- 글내용 보기, 글 수정 폼 -->
<select id="getBoard" parameterType="Integer"
resultType="com.mvc.pj.domain.BoardDAO">
select * from board where num=#{num}
</select>
<!-- DB 글 수정 -->
<update id="updateDao" parameterType="co.kr.Hello.dto.BoardDTO">
update board set
writer=#{writer}, subject=#{subject}, content=#{content}, where
num=#{num} and pw=#{pw}
</update>
<!-- 글 삭제 -->
<delete id="deleteDao" parameterType="int">
delete from board where
num=#{num}
</delete>
</mapper>
com.mvc.pj.controller.BoardController.java
BoardController틀
package com.mvc.pj.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
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.servlet.ModelAndView;
import com.mvc.pj.domain.BoardDTO;
public class BoardController {
@Autowired
private SqlSession sqlSession;// 변수, setter 자동으로
// 글쓰기 폼, 답글쓰기
// DB글 쓰기
// 리스트
// 글 내용 보기
// 수정 폼
// DB글 수정
}
글쓰기, 답글쓰기
// 글쓰기 폼, 답글쓰기
@RequestMapping("writeForm")
public String writeForm(Model model, String num, String re_group, String re_step, String re_depth, String pageNum) {
if (num == null) {// num이 없으면 글 쓰기
num = "0"; // 글 번호
re_group = "1"; // 글 그룹
re_step = "0"; // 글 순서
re_depth = "0";// 글 깊이
} // if-end
// 답글, 원글 모두 넣어줌.
model.addAttribute("pageNum", pageNum);
model.addAttribute("num", new Integer(num));
model.addAttribute("re_group", new Integer(re_group));
model.addAttribute("re_step", new Integer(re_step));
model.addAttribute("re_depth", new Integer(re_depth));
//
return "board/writeForm";// View return writeForm.jsp
}// writeForm-end
글 작성 저장
// DB글 쓰기
@RequestMapping(value = "writePro", method = RequestMethod.POST)
public String writePro(@ModelAttribute("boardDTO") BoardDTO boardDTO, HttpServletRequest request) {
int maxNum = 0;// 최대 글 번호 넣을 변수
if (sqlSession.selectOne("board.numMax") != null) {// 글번호가 있으면
// 글 번호가 있음 -> 글이 있음
maxNum = sqlSession.selectOne("board.numMax");// 최대 글번호 maxNum에 할당
}
if (maxNum != 0) {// 글이 이미 있으면
maxNum = maxNum + 1;// re_group 글 그룹에 넣음.
} else {// 처음 글이면
maxNum = 1;// re_group 글 그룹에 1을 넣음.(1번 번호)
}
String ip = request.getRemoteAddr();// ip얻기
boardDTO.setIp(ip);
// 원글, 답글
if (boardDTO.getNum() != 0) {// 답글이면
// 답글 끼워넣기 위치 확보
sqlSession.update("board.reStep", boardDTO);
boardDTO.setRe_step(boardDTO.getRe_step() + 1);// 글 순서 + 1
boardDTO.setRe_depth(boardDTO.getRe_depth() + 1);// 글 깊이 + 1
} else {// 원글이면
boardDTO.setRe_group(new Integer(maxNum));// 글 그룹
boardDTO.setRe_step(new Integer(0));// 글 순서
boardDTO.setRe_depth(new Integer(0));// 글 깊이
}
sqlSession.insert("board.insertDao", boardDTO);
return "redirect:list";// redirect:list.jsp
}// writePro-end
리스트 조회
// 리스트
@RequestMapping("list")
public String listBoard(Model model, String pageNum) {
if (pageNum == null) {// 페이지 번호 없으면
pageNum = "1";
}
int pageSize = 10;// 페이지당 글 10개씩 보여줌
int currentPage = Integer.parseInt(pageNum);// 현재 페이지
int startRow = (currentPage - 1) * pageSize + 1;// 페이지의 첫 번째 행 구함 : (현재페이지-1)*10+1
int endRow = currentPage * pageSize;// 페이지의 마지막 행
// startRow 1 11 21
// endRow 10 20 30
int count = 0;// 총 글 갯수 넣을 변수
int pageBlock = 10;// 블럭 당 페이지번호 10개
count = sqlSession.selectOne("board.countDao");// 글 갯수
int number = count - (currentPage - 1) * pageSize;// 글 번호 (글이 37개인 경우, 37 36 35 : 역순으로 나옴)
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("start", startRow + 1);// 시작 번호
map.put("cnt", pageSize);// 총 갯수
int pageCount = count / pageSize + (count % pageSize == 0 ? 0 : 1);// 총 페이지 수 구하기
// 몫 나머지레코드 없으면0 : 있으면 1 더함
//
int startPage = (currentPage / pageBlock) * 10 + 1;// 블럭 시작페이지
int endPage = startPage + pageBlock - 1;// 블럭의 끝 페이지
// --------------------------------------------------------------------
List<BoardDTO> list = sqlSession.selectList("board.listDao", map);
model.addAttribute("pageNum", pageNum);// 페이지번호
model.addAttribute("currentPage", currentPage);// 현재 페이지
model.addAttribute("startRow", startRow);// 페이지의 첫 번째 행
model.addAttribute("endRow", endRow);// 페이지의 마지막 행
model.addAttribute("pageBlock", pageBlock);// 블럭 당 페이지번호 10개
model.addAttribute("pageCount", pageCount);// 총 페이지 수
model.addAttribute("startPage", startPage);// 블럭 시작페이지
model.addAttribute("endPage", endPage);// 블럭의 끝 페이지
model.addAttribute("count", count);// 전체 글 갯수
model.addAttribute("pageSize", pageSize);// 페이지당 글 갯수
model.addAttribute("number", number);// 글 번호
model.addAttribute("list", list);//
return "board/list"; // View return list.jsp
}
글 상세보기
// 글 내용 보기
@RequestMapping("content")
public String content(Model model, String num, String pageNum) {
int num1 = Integer.parseInt(num);
sqlSession.update("board.readcountDao", num1);// 조회수증가
BoardDTO bdto = sqlSession.selectOne("board.getBoard", num1);
String content = bdto.getContent();
content = content.replace("\n", "<br/>");
model.addAttribute("content", content);
model.addAttribute("pageNum", pageNum);// 페이지번호
model.addAttribute("num", num1);
model.addAttribute("bdto", bdto);
return "board/content"; // view return content.jsp
}
수정 폼
// 수정 폼
@RequestMapping("updateForm")
public ModelAndView updateForm(String num, String pageNum) {
int num1 = Integer.parseInt(num);
BoardDTO bdto = sqlSession.selectOne("board.getBoard", num1);
ModelAndView mv = new ModelAndView();
mv.addObject("pageNum", pageNum);
mv.addObject("bdto", bdto);
mv.setViewName("board/updateForm");// updateForm.jsp
return mv;
}
글 수정
// DB글 수정
@RequestMapping(value = "updatePro", method = RequestMethod.POST)
public ModelAndView updatePro(BoardDTO boardDTO, String pageNum) {
sqlSession.update("board.updateDao", boardDTO);
ModelAndView mv = new ModelAndView();
mv.addObject("pageNum", pageNum);
mv.setViewName("refirect:list");//
return mv;
}
글 삭제
//글 삭제
@RequestMapping("delete")
public String delete(Model model, String num, String pageNum) {
sqlSession.delete("board.deleteDao", new Integer(num));
model.addAttribute("pageNum", pageNum);
return "redirect:list";
}
반응형
'IT > Java' 카테고리의 다른 글
Spring) Tiles 사용해보기 (0) | 2021.08.13 |
---|---|
Spring Legacy MiNi Project - STS / board view (0) | 2021.08.11 |
Spring) AOP( Aspect Oriented Programming ) / 관점지향 프로그래밍 (0) | 2021.08.09 |
Spring Legacy MiNi Project - STS / member view (0) | 2021.08.09 |
Spring) JDBC / jdbcTemplate / JPA / spring data JPA (0) | 2021.08.08 |
Comments