반응형
17일차 특이사항
1. 게시판 검색 기능 구현
2. 페이징 처리의 원리
게시판 검색 기능
1. list를 jsp에서 출력하면 페이징이 작동되지 않고, viewAll을 사용하면 페이징은 되는데 검색기능이 안됨. 뭐가 문제일까? mapper를 따로 만들어줬기 때문이다. mapper를 합치는 작업이 필요하다. 그런데 너무 어렵다. 이해가 되지 않아서 못하는 중이다.
// 게시글 목록
@RequestMapping("/list")
public String list(@RequestParam Map<String, Object> paramMap, Model model, PagingVO vo,
@RequestParam(value="nowPage", required=false)String nowPage,
@RequestParam(value="cntPerPage", required=false)String cntPerPage) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
list = service.list(paramMap);
model.addAttribute("list", list);
System.out.println("list에 뭐가 들어있나 :" + list);
int total = service.countBoard();
if (nowPage == null && cntPerPage == null) {
nowPage = "1";
cntPerPage = "10";
} else if (nowPage == null) {
nowPage = "1";
} else if (cntPerPage == null) {
cntPerPage = "10";
}
vo = new PagingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
model.addAttribute("paging", vo);
model.addAttribute("viewAll", service.selectBoard(vo));
System.out.println("viewAll에 무엇이 들어있나 : " + service.selectBoard(vo));
return "list2";
}
service.list와 service.selectBoard()를 합쳐야 한다.... 어떻게 하냐 진짜
2. mapper에서 게시판 리스트, 검색과 게시글 갯수, 페이징 처리를 어떻게 합치지?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper">
<resultMap type="map" id="rsMap">
<result column="seq" property="seq"/>
<result column="mem_name" property="name"/>
<result column="mem_id" property="id"/>
<result column="board_subject" property="subject"/>
<result column="board_content" property="content"/>
<result column="reg_date" property="regDate"/>
<result column="upt_date" property="uptDate"/>
<result column="view_cnt" property="viewCnt"/>
</resultMap>
<!-- 게시판 리스트, 검색 -->
<select id="list" resultMap="rsMap">
select
seq
, mem_name
, mem_id
, board_subject
, board_content
, reg_date
, upt_date
, view_cnt
, useyn
from board_study
where 1=1
<choose>
<when test="searchType == 'name'">
and mem_name like '%'||#{keyword}||'%'
</when>
<when test="searchType == 'subject'">
and board_subject like '%'||#{keyword}||'%'
</when>
<when test="searchType == 'content'">
and board_subject like '%'||#{keyword}||'%'
or board_content like '%'||#{keyword}||'%'
</when>
</choose>
<if test="stDate != null and stDate != ''">
and to_char(reg_date, 'yyyy-MM-dd') between #{stDate} and #{endDate}
</if>
order by seq desc
</select>
<!-- 글 등록하기 -->
<insert id = "insert" parameterType="map">
insert into board_study
(
seq
,mem_name
,mem_id
,board_subject
,board_content
,reg_date
,view_cnt
,useyn
)values(
( select nvl(max(seq), 0)+1 from board_study)
,#{name}
,#{id}
,#{subject}
,#{content}
,sysdate
,0
,'y'
)
</insert>
<!-- 글 상세보기 -->
<select id="detail" resultMap="rsMap" parameterType="int">
select
seq
, mem_name
, mem_id
, board_subject
, board_content
, reg_date
, upt_date
,view_cnt
, useyn
from board_study
where seq = #{seq}
</select>
<!-- 글 수정하기 -->
<update id="update" parameterType="com.com.board.BoardDto">
UPDATE
board_study
SET
MEM_NAME = #{name},
MEM_ID = #{id},
BOARD_SUBJECT = #{subject},
BOARD_CONTENT = #{content},
UPT_DATE = sysdate
WHERE SEQ = #{seq}
</update>
<!-- 글 삭제하기 -->
<delete id="delete" parameterType="int">
delete from board_study
where seq in (
<foreach collection="array" separator="," item="aa">
#{aa}
</foreach>
)
</delete>
<!-- 총 게시글 갯수 출력 -->
<select id="countBoard" resultType="int">
select count(*)
from board_study
</select>
<!-- 페이징 처리 후 게시글 조회 -->
<select id="selectBoard" resultMap="rsMap">
SELECT
seq
, mem_name
, mem_id
, board_subject
, board_content
, reg_date
, upt_date
, view_cnt
, useyn
FROM (
SELECT ROWNUM RN, A.*
FROM (
SELECT *
FROM board_study
ORDER BY SEQ DESC
) A
)
WHERE RN BETWEEN #{start} AND #{end}
</select>
</mapper>
3. 다시 해보자. 코드를 새로 짜고 있다.
게시판 조회 결과를 list 담아 JSP 전달 , 페이징 처리 후 결과를 map 담에 JSP 전달한다.
검색은 잘되는데 아직도 페이징이 안되고 있다. 밥먹고 다시 해보자.
게시판 페이징 처리 원리
<페이징 원리>
데이터를 가져와서 자르거나
잘라서 데이터를 가져오거나
페이징 이거 어렵네
페이징을 처음해보는데 까다롭다. 될 때까지 해보자.
반응형
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 19일차] 동기 방식과 비동기 방식의 차이점 (0) | 2023.08.28 |
---|---|
[국민취업지원제도 일경험프로그램 18일차] 게시판 페이징 Dao, service 코드 (0) | 2023.08.25 |
[국민취업지원제도 일경험프로그램 16일차] 게시판 페이징 기능, 게시판 검색 기능 (0) | 2023.08.23 |
[국민취업지원제도 일경험프로그램 15일차] 게시판 페이징 처리... (0) | 2023.08.22 |
[국민취업지원제도 일경험프로그램 14일차] 게시판 수정하기, 체크박스 삭제하기 (0) | 2023.08.21 |