해야할 일

  • BoardController → MemberController
  • BoardService/Impl → MemberService/Impl
  • BoardMapper → MemberMapper
  • BoardVO/BoardPageDTO/BoardCriteria → MemberVO/MemberPageDTO/MemberCriteria
  • BoardMapper.xml → MemberMapper.xml
  • JSP파일 수정: list.jsp / get.jsp / register.jsp

파일 순서

  • domain
  • mapper / mapper.xml
  • service / impl
  • controller
  • Board 파일들을 복사하여 Member 파일들을 만들고 변수들을 바꿔주는 작업을 한다.
  • xml 파일에 쓰인 컬럼들을 Member 파일에 맞게 변환시켜 준 후 jsp 파일을 Member에 맞는 폼을 만든다.

 

[Board 관련 코드]

1. Board - domain (VO, DTO, Criteria)

// domain(1) BoardVO
@Data
public class BoardVO {
	
	private int bno;
	private String title;
	private String content;
	private String wrtier;
	private Date regDate;
	private Date updateDate;
	
}

// domain(2) BoardPageDTO
@Getter
@ToString
public class BoardPageDTO {

	private int startPage;//시작페이지
	private int endPage;//끝페이지
	
	private boolean prev, next; //이전 다음
	
	private int total;//전체 레코드수
	private BoardCriteria cri;//현재페이지, 한페이지당 보여줄 갯수
	private final int PAGE_NUM = 5; //아래에 나오게 할 페이지의 갯수
	
	public BoardPageDTO(int total, BoardCriteria cri) {
		this.total = total;
		this.cri = cri;
		
		this.endPage = (int)(Math.ceil(cri.getPageNum()/(PAGE_NUM*1.0)))*PAGE_NUM;
		this.startPage = this.endPage - (PAGE_NUM-1);
		
		int realEnd = (int)(Math.ceil((total * 1.0) / cri.getAmount()));
		if(realEnd < this.endPage) {
			this.endPage = realEnd;
		}
		
		this.prev = this.startPage > 1;
		this.next = this.endPage < realEnd;
	}
}

// domain(3) BoardCriteria
@Data
public class BoardCriteria {

	private int pageNum; 	//현재페이지번호
	private int amount;		//한 페이지당 보여줄 게시글 수
	
	//0527 추가
	private String type;
	private String keyword;
	
	public BoardCriteria() {
		this(1, 10);
	}

	public BoardCriteria(int pageNum, int amount) {
		this.pageNum = pageNum;
		this.amount = amount;
	}
	
	//사용법: Mybatis xml에서 #{pageStart} 로 사용된다.
	//mySql에서 (getPageNum() -1) * getAmount()가 syntax에러가 나서 메소드로 만들어준다.
	public int getPageStart() {
		return (getPageNum() -1) * getAmount();
	}
}

 

 

2. Board - mapper (Mapper.java, Mapper.xml)

// Mapper(1) BoardMapper.java
public interface BoardMapper {

	// 목록보기
	public List<BoardVO> getList();
	
	public List<BoardVO> getListWithPaging(BoardCriteria cri);
	
	// 등록하기
	public void insert(BoardVO board);
	
	// 읽기(특정번호)
	public BoardVO read(int bno);
	
	public int update(BoardVO board);
	
	public int delete(int bno);

	public int getListWithCnt(BoardCriteria cri);
}

// Mapper(2) BoardMapper.xml
<mapper namespace="com.kb.mapper.BoardMapper">
   <select id="getList" resultType="com.kb.domain.BoardVO">
      SELECT * FROM tbl_board ORDER BY bno DESC LIMIT 0, 10
   </select>
   
   <!-- WHERE 1=1 추가 0527 -->
   <!-- 추가: <choose> <when> -->
  <select id="getListWithPaging" resultType="com.kb.domain.BoardVO">
		<![CDATA[
		SELECT * FROM tbl_board 
		WHERE 1=1 
		]]>
		<choose>
			<when test="type == 'title'">
			AND title LIKE concat('%',#{keyword},'%')
			</when>
			<when test="type == 'content'">
			AND content LIKE concat('%',#{keyword},'%')
			</when>
		</choose>
		<![CDATA[
		ORDER BY bno DESC 
		LIMIT #{amount} offset #{pageStart}
		]]>
	</select>
   
   <select id="getListWithCnt" resultType="int">
      SELECT count(*) FROM tbl_board 
      WHERE 1=1 
		<choose>
			<when test="type == 'title'">
			AND title LIKE concat('%',#{keyword},'%')
			</when>
			<when test="type == 'content'">
			AND content LIKE concat('%',#{keyword},'%')
			</when>
		</choose>
		</select>
   
   
   <!-- id=메소드명 -->
   <insert id="insert">
      INSERT INTO tbl_board(title, content, wrtier)
      VALUES (#{title}, #{content}, #{wrtier});
   </insert>
   
   <select id="read" resultType="com.kb.domain.BoardVO">
   	SELECT * FROM tbl_board WHERE bno = #{bno}
   </select>
   
   <update id="update">
   	UPDATE tbl_board SET title = #{title}, content = #{content}, wrtier = #{wrtier}, updateDate = now()
   	WHERE bno = #{bno}
   </update>
   
   <delete id="delete">
   	DELETE FROM tbl_board WHERE bno = #{bno}
   </delete>
</mapper>

 

 

3. Board - service (ServiceImpl, Service)

// service(1) Boardservice.java
public interface BoardService {

	// insert
	public void register(BoardVO board);
	
	// read(int)
	public  BoardVO get(int bno);
	
	//update
	public boolean modify(BoardVO board);
	
	//delete
	public boolean remove(int bno);
	
	// read(list)
	public List<BoardVO> getList();
	
	public List<BoardVO> getListWithPaging(BoardCriteria cri);

	public int getListWithCnt(BoardCriteria cri);
}

// service(2) BoardServiceImpl.java
@Service
@Log4j
@AllArgsConstructor
public class BoardServiceImpl implements BoardService {

	@Setter(onMethod_ = @Autowired)
	private BoardMapper mapper;	//mapper 객체를 만들어야 mapper로 갈거 아녀~
	
	@Override
	public void register(BoardVO board) {
		log.info("register");	// 게시글 등록한다~
		mapper.insert(board); 	// service -> mapper의 insert
		// service의 register 호출하면 mapper의 insert가 딩동~
	}

	@Override
	public BoardVO get(int bno) {
		return mapper.read(bno);
	}

	@Override
	public boolean modify(BoardVO board) {
		return mapper.update(board) == 1;
	}

	@Override
	public boolean remove(int bno) {
		return mapper.delete(bno) == 1;
	}

	@Override
	public List<BoardVO> getList() {
		log.info("getList..................");
		return mapper.getList();				// 전체 내용을 보여달라
	}

	@Override
	public List<BoardVO> getListWithPaging(BoardCriteria cri) {
		//전체 내용
		log.info("getList..................");
		return mapper.getListWithPaging(cri);
	}

	@Override
	public int getListWithCnt(BoardCriteria cri) {
	log.info("getList..................");
		return mapper.getListWithCnt(cri);
	}	
}

 

 

4. Board - controller (Controller)

//BoardController
@RequestMapping("/board/*")
@Controller
@Log4j
@AllArgsConstructor
public class BoardController {
	
	private BoardService service;
	
	@RequestMapping(value = "/list", method = RequestMethod.GET) 
	public void list(BoardCriteria cri, Model model) {
		log.info(cri);
		model.addAttribute("list", service.getListWithPaging(cri));
		model.addAttribute("pageMaker", new BoardPageDTO(service.getListWithCnt(cri), cri));
	}

	@RequestMapping(value = "/register", method = RequestMethod.GET) 
	public void register() {
		
	}
	
	// 오버로딩_메소드명은 같지만 변수명을 달리주는 것.
	@RequestMapping(value = "/register", method = RequestMethod.POST) 
	public String register(BoardVO board, RedirectAttributes rttr) {
		service.register(board);
		return "redirect:/board/list";
	}

	
	@RequestMapping(value = "/get", method = RequestMethod.GET)
	public void get(@RequestParam("bno") int bno, Model model) {
		model.addAttribute("board", service.get(bno));
	}

	@RequestMapping(value = "/get", method = RequestMethod.POST)
	public String get(BoardVO board) {
		boolean result = service.modify(board);
		if(result) {
			return "redirect:/board/list";
		} else {
		return "redirect:/board/get?bno="+board.getBno();
		}
	}

	//GET 방식 삭제
	@RequestMapping(value = "/remove", method = RequestMethod.GET)
	public String remove(@RequestParam("bno") int bno) {
		service.remove(bno);
		return "redirect:/board/list";
	}
		
	@RequestMapping(value = "/remove", method = RequestMethod.POST)
	public String remove(BoardVO board) {
		service.remove(board.getBno());
		return "redirect:/board/list";
	}	
}

 

[Board 관련 jsp 파일들]

1. get.jsp

<!-- JSP include -->
<%@ include file="../includes/header.jsp" %>

<div class="col-md-12">
    <h4 class="m-b-lg">Board Read Page</h4>
</div><!-- END column -->


<div class="col-md-12">
    <div class="widget p-lg">
        <h4 style="display:inline;" class="m-b-lg">Board Read Page</h4>
        <p class="m-b-lg docs">
            <!-- Add <code>.table-hover</code> to enable a hover state on table rows within a <code>&lt;tbody&gt;</code>. -->
        </p>

        <div class="panel-body">
        <!--  Get으로 온걸 Post로 넘긴다. -->
        <!-- action에 값이 없는 것은  자기 자신에게로 값을 던진다. -->
            <form id="frm" method="post" action="">
                <input type="hidden" id="bno" name="bno" value="${board.bno }">
                <div class="form-group"><label>Title</label>
                	<input type="text" name="title" id="title" class="form-control" value="${board.title }" required="required">
                </div>	
                <div class="form-group"><label>Content</label>
                	<textarea  required="required" name="content" id="content" class="form-control" style="resize:none">${board.content }</textarea>
                </div>
                <div class="form-group"><label>Writer</label>
                	<input value="${board.wrtier }" required="required" type="text" name="wrtier" id="wrtier" class="form-control" value="">
                </div>	
                <div class="form-group">
                    <button type="submit" class="btn btn-primary">Update</button>
                    <button type="button" class="btn btn-default">Cancel</button>
                    <button type="button" id="btn_del" class="btn btn-link pull-right">Delete</button>
                </div>
            </form>
        </div>
    </div><!-- .widget -->
</div><!-- END column -->
			
<script>
	$(document).ready(function () {
		$("#btn_del").on("click", function () {
			if(confirm("정말로 삭제하시겠습니까")) {
				// get방식(링크): location.href="remove?bno=${board.bno}"
				// POST방식(폼)
				$("#frm").attr("action", "remove");
				$("#frm").submit();
			}
			console.log("삭제버튼" + res);
		})
	});

</script>

 

2. list.jsp

<!-- JSP include -->
<%@ include file="../includes/header.jsp"%>
<!-- JSP 액션태그 include -->
<%-- <jsp:include page="../includes/header.jsp"></jsp:include> --%>

<div class="col-md-12">
	<h4 class="m-b-lg">Tables</h4>
</div>
<!-- END column -->


<div class="col-md-12">
	<div class="widget p-lg">
     <h4 style="display: inline;" class="m-b-lg">Board List Page</h4> 

    <a href="register" style="float: right;" class="btn btn-primary" role="button">Register New Board</a><br/>

    <p class="m-b-lg docs">

    </p>

    <table class="table table-hover">
        <thead>
            <tr>
                <th>번호</th>
                <th>제목</th>
                <th>작성자</th>
                <th>작성일</th>
                <th>수정일</th>
            </tr>
        </thead>
        <!-- var: 변수선언, items: 넘겨받는 값 -->
        <c:forEach items="${list }" var="board">
            <tr>
                <td>${board.bno }</td>
                <td><a href="get?bno=${board.bno }">${board.title }</a></td>
                <!-- get 방식으로 가는 것. -->
                <td>${board.wrtier }</td>
                <td><f:formatDate value="${board.regDate }"
                        pattern="Y-M-d HH:mm:ss" /></td>
                <td><f:formatDate value="${board.updateDate }"
                        pattern="yyyy-MM-dd HH:mm:ss" /></td>
            </tr>
        </c:forEach>
    </table>
	<div class="container-fluid">
    <div class="row">
      <div class="col-xs-7 pagination">

      <div>
      <form>
      <!-- cri.type -->
        <select name="type" class="form-control" style="float:left; width:21%; height:32px;">
                <option value="">전체</option>
                <option value="title" ${pageMaker.cri.type == "title"?"selected='selected'":""}>제목</option>
                <option value="content" ${pageMaker.cri.type == "content"?"selected='selected'":""}>내용</option>
            </select>
        <!-- cri.keyword -->
        <!-- jQuery로 안 할 거면 id 필요 없음. -->
        <!-- value에다 넘어온 값 출력 -->
        <input type="text" placeholder="검색어를 입력하세요" value="${pageMaker.cri.keyword }" name="keyword" class="form-control" style="float:left; width:50%;">
        <button class="btn btn-default" style="float:left;">검색</button>
        </form>
        </div>

      </div>
      <div class="col-xs-5" style="text-align:right;">
          <ul class="pagination">
            <c:if test="${pageMaker.prev}">
            <li class="paginate_button">
              <a href="?pageNum=${pageMaker.startPage - 1}" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
              </a>
            </li>
            </c:if>
            <c:forEach begin="${pageMaker.startPage}" end="${pageMaker.endPage}" var="num">
            <li class="paginate_button">
                <a href="?pageNum=${num}">${num}</a>
            </li>
            </c:forEach>
            <c:if test="${pageMaker.next}">
            <li class="paginate_button">
              <a href="?pageNum=${pageMaker.endPage + 1}" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
              </a>
            </li>
            </c:if>
          </ul>
      </div>
    </div>
</div>
	<!-- .widget -->
</div>
</div>
<!-- END column -->
<form id="operForm" action="" method="get">
	<input type="hidden" id="pageNum" name="pageNum" value="${pageMaker.cri.pageNum }"> <input
		type="hidden" name="amount" value="${pageMaker.cri.amount }">
</form>
<script>
/* e.preventDefault() 무효화 버튼, 누르면 이동해야 하는데 안 감 */
	$(document).ready(function() {
		$(".paginate_button a").on("click", function(e) {
			e.preventDefault();
			$("#pageNum").val($(this).attr("href"));
			$("#operForm").submit();
		});
	});
</script>

 

3. register.jsp

<!-- JSP include -->
<%@ include file="../includes/header.jsp" %>
<!-- JSP 액션태그 include -->
<%-- <jsp:include page="../includes/header.jsp"></jsp:include> --%>

<div class="col-md-12">
    <h4 class="m-b-lg">Board Register</h4>
</div><!-- END column -->


<div class="col-md-12">
    <div class="widget p-lg">
        <h4 style="display:inline;" class="m-b-lg">Board Register</h4>
        <p class="m-b-lg docs">
            <!-- Add <code>.table-hover</code> to enable a hover state on table rows within a <code>&lt;tbody&gt;</code>. -->
        </p>

        <div class="panel-body">
        <!--  Get으로 온걸 Post로 넘긴다. -->
        <!-- action에 아무것도 안 적으면 자기자신의 페이지를 부른다. -->
            <form method="post" action="">
            <div class="form-group">
                <label>Title</label><input type="text" name="title" id="title" class="form-control" value="" required="required">
            </div>	
            <div class="form-group">
                <label>Content</label><textarea required="required" name="content" id="content" class="form-control" style="resize:none"></textarea>
            </div>
            <div class="form-group">
                <label>Writer</label><input required="required" type="text" name="wrtier" id="wrtier" class="form-control" value="">
            </div>	
            <div class="form-group">
                <button type="submit" class="btn btn-primary">Submit</button>
                <button type="button" class="btn btn-link">Cancel</button>
            </div>
            </form>

        </div>

    </div><!-- .widget -->
</div><!-- END column -->
			
					
<!-- JSP include -->
<jsp:include page="../includes/footer.jsp"/>

 

이제 이걸 Member 관련 코드로 바꾸면 된다.

+ Recent posts