실습(댓글)
- [Web_Spring] 15 이어서
1. src/main/java/com.example.board/domain/vo/ReplyVO.java
package com.example.board.domain.vo;
import lombok.Data;
import org.springframework.stereotype.Component;
@Component
@Data
public class ReplyVO {
private Long replyNumber;
private Long boardNumber;
private String replyContent;
private String replyWriter;
private String replyRegisterDate;
private String replyUpdateDate;
}
2. src/main/java/com.example.board/mapper/ReplyMapper.java
package com.example.board.mapper;
import com.example.board.domain.vo.Criteria;
import com.example.board.domain.vo.ReplyVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ReplyMapper {
// 댓글 등록
public void insert(ReplyVO replyVO);
// 댓글 1개 조회
public ReplyVO select(Long replyNumber);
// 댓글 삭제
public void delete(Long replyNumber);
// 댓글 수정
public void update(ReplyVO replyVO);
// 댓글 목록
public List<ReplyVO> getList(@Param("criteria") Criteria criteria, @Param("boardNumber") Long boardNumber);
// 댓글 개수
public int getTotal(Long boardNumber);
}
3. src/main/java/com.example.board/domain/dao/ReplyDAO.java
package com.example.board.domain.dao;
import com.example.board.domain.vo.Criteria;
import com.example.board.domain.vo.ReplyVO;
import com.example.board.mapper.ReplyMapper;
import lombok.RequiredArgsConstructor;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class ReplyDAO {
private final ReplyMapper replyMapper;
// 댓글 등록
public void register(ReplyVO replyVO){
replyMapper.insert(replyVO);
}
// 댓글 1개 조회
public ReplyVO read(Long replyNumber){
return replyMapper.select(replyNumber);
}
// 댓글 삭제
public void remove(Long replyNumber){
replyMapper.delete(replyNumber);
}
// 댓글 수정
public void modify(ReplyVO replyVO){
replyMapper.update(replyVO);
}
// 댓글 목록
public List<ReplyVO> getList(Criteria criteria, Long boardNumber){
return replyMapper.getList(criteria, boardNumber);
}
// 댓글 개수
public int getTotal(Long boardNumber){
return replyMapper.getTotal(boardNumber);
}
}
4. src/main/java/com.example.board/domain/vo/Criteria.java
package com.example.board.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
@Component
@Data
//@RequiredArgsConstructor //기본 생성자보다 우선순위가 낮다.
@AllArgsConstructor
public class Criteria {
private Integer pageNum;
private Integer amount;
private String type;
private String keyword;
public Criteria() {
this(1, 10);
}
public Criteria(Integer pageNum, Integer amount) {
this.pageNum = pageNum;
this.amount = amount;
}
public String[] getTypes(){
return type == null ? new String[]{} : type.split("");
}
public String getListLink() {
UriComponentsBuilder builder = UriComponentsBuilder.fromPath("")
.queryParam("pageNum", this.pageNum)
.queryParam("amount", this.amount)
.queryParam("keyword", this.keyword)
.queryParam("type", type);
return builder.toUriString();
}
}
5. src/main/java/com.example.board/service/ReplyService.java
package com.example.board.service;
import com.example.board.domain.dao.ReplyDAO;
import com.example.board.domain.vo.Criteria;
import com.example.board.domain.vo.ReplyVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ReplyService {
private final ReplyDAO replyDAO;
// 댓글 등록
public void register(ReplyVO replyVO){
replyDAO.register(replyVO);
}
// 댓글 1개 조회
public ReplyVO read(Long replyNumber){
return replyDAO.read(replyNumber);
}
// 댓글 삭제
public void remove(Long replyNumber){
replyDAO.remove(replyNumber);
}
// 댓글 수정
public void modify(ReplyVO replyVO){
replyDAO.modify(replyVO);
}
// 댓글 목록
public List<ReplyVO> getList(Criteria criteria, Long boardNumber){
return replyDAO.getList(criteria, boardNumber);
}
// 댓글 개수
public int getTotal(Long boardNumber){
return replyDAO.getTotal(boardNumber);
}
}
6. src/main/resource/mapper/ReplyMapper.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="com.example.board.mapper.ReplyMapper">
<insert id="insert">
INSERT INTO TBL_REPLY (REPLY_NUMBER, BOARD_NUMBER, REPLY_CONTENT, REPLY_WRITER)
VALUES(SEQ_REPLY.NEXTVAL, #{boardNumber}, #{replyContent}, #{replyWriter})
</insert>
<select id="select" resultType="replyVO">
SELECT REPLY_NUMBER, BOARD_NUMBER, REPLY_CONTENT, REPLY_WRITER, REPLY_REGISTER_DATE, REPLY_UPDATE_DATE
FROM TBL_REPLY WHERE REPLY_NUMBER = #{replyNumber}
</select>
<delete id="delete">
DELETE FROM TBL_REPLY WHERE REPLY_NUMBER = #{replyNumber}
</delete>
<update id="update">
UPDATE TBL_REPLY
SET REPLY_CONTENT = #{replyContent}, REPLY_UPDATE_DATE = SYSDATE
WHERE REPLY_NUMBER = #{replyNumber}
</update>
<select id="getList" resultType="replyVO">
<![CDATA[
SELECT REPLY_NUMBER, BOARD_NUMBER, REPLY_CONTENT, REPLY_WRITER, REPLY_REGISTER_DATE, REPLY_UPDATE_DATE
FROM
(
SELECT /*+ INDEX_DESC(TBL_REPLY PK_REPLY) */
ROWNUM RN, REPLY_NUMBER, BOARD_NUMBER, REPLY_CONTENT, REPLY_WRITER, REPLY_REGISTER_DATE, REPLY_UPDATE_DATE
FROM TBL_REPLY WHERE BOARD_NUMBER = #{boardNumber} AND ROWNUM <= #{criteria.pageNum} * #{criteria.amount}
)
WHERE RN > (#{criteria.pageNum} - 1) * #{criteria.amount}
]]>
</select>
<select id="getTotal" resultType="_int">
SELECT COUNT(REPLY_NUMBER) FROM TBL_REPLY WHERE BOARD_NUMBER = #{boardNumber}
</select>
</mapper>
'웹 개발 > Spring' 카테고리의 다른 글
[Web_Spring] 18 (0) | 2022.06.30 |
---|---|
[Web_Spring] 17 (0) | 2022.06.29 |
[Web_Spring] 15 (0) | 2022.06.27 |
[Web_Spring] 14 (0) | 2022.06.26 |
[Web_Spring] 13 (0) | 2022.06.25 |