본문 바로가기

일경험

[국민취업지원제도 일경험프로그램 17일차] 게시판 검색, 게시판 페이징

반응형

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 전달한다. 

 

게시판 검색

검색은 잘되는데 아직도 페이징이 안되고 있다. 밥먹고 다시 해보자. 

 

게시판 페이징 처리 원리 

<페이징 원리> 

데이터를 가져와서 자르거나

잘라서 데이터를 가져오거나 

 

페이징 이거 어렵네

페이징을 처음해보는데 까다롭다. 될 때까지 해보자. 

 

 

 

반응형