BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
public BoardVO read(int bid);
}
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="edu.global.ex.mapper.BoardMapper">
<select id="getList" resultType="edu.global.ex.vo.BoardVO">
<![CDATA[
select * from mvc_board order by bgroup desc, bstep asc
]]>
</select>
<select id="read" resultType="edu.global.ex.vo.BoardVO">
<![CDATA[
select * from mvc_board where bid = #{bid}
]]>
</select>
</mapper>
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public abstract List<BoardVO> getList();
public BoardVO get(int bid);
}
BoardServiceImpl.java
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.mapper.BoardMapper;
import edu.global.ex.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
@Override
public List<BoardVO> getList() {
log.info("getList()..");
return mapper.getList();
}
@Override
public BoardVO get(int bid) {
log.info("get()..");
return mapper.read(bid);
}
}
BoardController.java
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.BoardService;
import edu.global.ex.vo.BoardVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/jboard/*")
@RequiredArgsConstructor
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
model.addAttribute("boards", boardService.getList());
return "/board/list";
}
@GetMapping("/content_view")
public String content_view(BoardVO boardVO, Model model) {
log.info("content_view()...");
int bid = boardVO.getBid();
boardVO = boardService.get(bid);
model.addAttribute("content_view", boardVO);
return "/board/content_view";
}
}
BoardController.java
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.BoardService;
import edu.global.ex.vo.BoardVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/jboard/*")
@RequiredArgsConstructor
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
model.addAttribute("boards", boardService.getList());
return "/board/list";
}
@GetMapping("/content_view")
public String content_view(BoardVO boardVO, Model model) {
log.info("content_view()...");
int bid = boardVO.getBid();
boardVO = boardService.get(bid);
model.addAttribute("content_view", boardVO);
return "/board/content_view";
}
@PostMapping("/modify")
public String modify(BoardVO boardVO, Model model) {
log.info("modify()...");
int rn = boardService.modify(boardVO);
log.info("modify()... result number : " + rn);
return "redirect:list";
}
}
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public List<BoardVO> getList();
public BoardVO get(int bid);
public int modify(BoardVO boardVO);
}
BoardServiceImpl.java
package edu.global.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.global.ex.mapper.BoardMapper;
import edu.global.ex.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
@Override
public List<BoardVO> getList() {
log.info("getList()..");
return mapper.getList();
}
@Override
public BoardVO get(int bid) {
log.info("get()..");
return mapper.read(bid);
}
@Override
public int modify(BoardVO boardVO) {
log.info("modify()..");
return mapper.update(boardVO);
}
}
BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
public BoardVO read(int bid);
public int update(BoardVO boardVO);
}
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="edu.global.ex.mapper.BoardMapper">
<select id="getList" resultType="edu.global.ex.vo.BoardVO">
<![CDATA[
select * from mvc_board order by bgroup desc, bstep asc
]]>
</select>
<select id="read" resultType="edu.global.ex.vo.BoardVO">
<![CDATA[
select * from mvc_board where bid = #{bid}
]]>
</select>
<update id="update">
<![CDATA[
update mvc_board set bname=#{bname}, btitle=#{btitle}, bcontent=#{bcontent}
where bid =#{bid}
]]>
</update>
</mapper>
content_view.jsp 태그 수정
<a href="delete?bid=${content_view.bid}">삭제</a>
BoardController.java (함수 추가)
@GetMapping("/delete")
public String delete(BoardVO boardVO, Model model) {
log.info("delete()...");
int bid = boardVO.getBid();
int rn = boardService.delete(bid);
log.info("delete()... result number : " + rn);
return "redirect:list";
}
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public List<BoardVO> getList();
public BoardVO get(int bid);
public int modify(BoardVO boardVO);
public int delete(int bid);
}
BoardServiceImpl.java (delete 함수 추가)
@Override
public int delete(int bid) {
log.info("delete(int bid)..");
return mapper.remove(bid);
}
BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
public BoardVO read(int bid);
public int update(BoardVO board);
public int remove(int bid);
}
BoardMapper.xml (delete 태그 추가)
<delete id="remove">
<![CDATA[
delete mvc_board where bid = #{bid}
]]>
</delete>
BoardController.java (write_view 이동 추가)
@GetMapping("/write_view")
public String write_view(BoardVO boardVO, Model model) {
log.info("write_view()...");
return "/board/write_view";
}
<body>
<form action="/jboard/write" method="post">
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<td>이름</td>
<td><input id="input_bname" type="text" name="bname" size="50">
</td>
</tr>
<tr>
<td>제목</td>
<td><input id="input_btitle" type="text" name="btitle"
size="50"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea id="input_bcontent" name="bcontent" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="입력">
<a href="list">목록보기</a></td>
</tr>
</table>
</form>
</body>
BoardController.java (write 이동 추가)
@PostMapping("/write")
public String write(BoardVO boardVO) {
log.info("write()...");
int rn = boardService.register(boardVO);
log.info("register()... result number : " + rn);
return "redirect:list";
}
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public List<BoardVO> getList();
public BoardVO get(int bid);
public int modify(BoardVO boardVO);
public int delete(int bid);
public int register(BoardVO boardVO);
}
BoardServiceImpl.java
@Override
public int register(BoardVO board) {
log.info("register()..");
return mapper.insert(board);
}
BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
public BoardVO read(int bid);
public int update(BoardVO board);
public int remove(int bid);
public int insert(BoardVO board);
}
BoardMapper.xml
<insert id="insert">
<![CDATA[
insert into mvc_board (bid, bname, btitle, bcontent, bhit, bgroup, bstep, bindent)
values (mvc_board_seq.nextval, #{bname}, #{btitle}, #{bcontent}, 0, mvc_board_seq.currval, 0, 0)
]]>
</insert>
BoardController.java (reply_view 추가)
@GetMapping("/reply_view")
public String reply_view(BoardVO boardVO, Model model) {
log.info("reply_view()...");
model.addAttribute("reply_view", boardService.get(boardVO.getBid()));
return "/board/reply_view";
}
BoardController.java (reply 추가)
@PostMapping("/reply")
public String reply(BoardVO boardVO) {
log.info("reply()...");
boardService.registerReply(boardVO);
return "redirect:list";
}
BoardService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.BoardVO;
public interface BoardService {
public List<BoardVO> getList();
public BoardVO get(int bid);
public int modify(BoardVO boardVO);
public int delete(int bid);
public int register(BoardVO boardVO);
public void registerReply(BoardVO boardVO);
}
BoardServiceImpl.java (void registerReply 함수 추가)
@Override
public void registerReply(BoardVO board) {
log.info("registerReply()..");
mapper.updateShape(board);
mapper.insertReply(board);
}
BoardMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.BoardVO;
@Mapper
public interface BoardMapper {
public List<BoardVO> getList();
public BoardVO read(int bid);
public int update(BoardVO board);
public int remove(int bid);
public int insert(BoardVO board);
public void updateShape(BoardVO board);
public void insertReply(BoardVO board);
}
BoardMapper.xml (추가하기)
<!--댓글을 하나씩 미뤄서 정렬을 해줘야 하기 때문에 세로 정렬을 bstep에 +1로 한칸씩 미뤄내줘야한다. -->
<update id="updateShape">
<![CDATA[
update mvc_board set bstep = bstep + 1 where bgroup =#{bgroup} and bstep > #{bstep}
]]>
</update>
<insert id="insertReply">
<![CDATA[
insert into mvc_board (bid, bname, btitle, bcontent, bgroup, bstep, bindent)
values (mvc_board_seq.nextval, #{bname}, #{btitle},#{bcontent},
#{bgroup}, #{bstep}+1, #{bindent}+1)
]]>
</insert>
BoardServiceImpl.java (registerReply에 Annotation 추가)
@Transactional
@Override
public void registerReply(BoardVO board) {
log.info("registerReply()..");
mapper.updateShape(board);
mapper.insertReply(board);
}
EmpController.java
package edu.global.ex.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import edu.global.ex.service.EmpService;
import edu.global.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/emp/*")
@RequiredArgsConstructor
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/list")
public String view_list(Model model) {
log.info("view_list()...");
model.addAttribute("emps", empService.getList());
return "/emp/emp_list";
}
@GetMapping("/emp_view")
public String emp_view(EmpVO empVO, Model model) {
log.info("emp_view()...");
int empno = empVO.getEmpno();
empVO = empService.get(empno);
model.addAttribute("emp_view", empVO);
return "/emp/emp_view";
}
}
EmpService.java
package edu.global.ex.service;
import java.util.List;
import edu.global.ex.vo.EmpVO;
public interface EmpService {
public abstract List<EmpVO> getList();
public EmpVO get(int bno);
}
EmpServiceImpl.java
@Autowired
private final EmpMapper mapper;
@Override
public List<EmpVO> getList() {
log.info("getList()..");
return mapper.getList();
}
@Override
public EmpVO get(int bid) {
log.info("get()..");
return mapper.read(bid);
}
EmpMapper.java
package edu.global.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.global.ex.vo.EmpVO;
@Mapper
public interface EmpMapper {
public List<EmpVO> getList();
public EmpVO read(int bid);
}
EmpMapper.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="edu.global.ex.mapper.EmpMapper">
<select id="getList" resultType="edu.global.ex.vo.EmpVO">
<![CDATA[
select * from emp
]]>
</select>
<select id="read" resultType="edu.global.ex.vo.EmpVO">
<![CDATA[
select * from emp where empno = #{empno}
]]>
</select>
</mapper>