본문 바로가기
코딩/수업 정리

21.02.01 [049] Mon

by 6^6 2021. 2. 1.
728x90

단위 data source / vo
통합 시스템(부하) 인수 테스트

 

 

SPRING

 

페이징 처리 조건

1. ui처리를 위한 설계-변수 7개.(startPage, endPage, prev, next, total, cri, pageNum)
2. DB 쿼리 처리(my sql-처리가 상당히 간단.limit로 처리하면됨,오라클 11g이하, 12이상)

 

 

--sql 처리 순서
--1. FROM/WHERE 절이 먼저 처리됩니다.
--2. ROWNUM이 할당되고 FROM/WHERE 절에서 전달되는 각각의 출력 로우에 대해 증가(increment) 됩니다.
--3. SELECT가 적용됩니다.
--4. GROUP BY 조건이 적용됩니다.
--5. HAVING이 적용됩니다.
--6. ORDER BY 조건이 적용됩니다

imnkj.tistory.com/11

 

[Board]게시글 목록 조회

http://localhost:8089/board/list BoardController.java - /board/list -> getList 실행 1) 게시글을 10개만 조회 2) 화면에 페이지 번호, 이전, 다음 버튼 출력을 위해 PageDTO를 사용하여 계산 // 전체 게시글..

imnkj.tistory.com

(쿼리문참조)

sinpk.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%BF%BC%EB%A6%AC

 

오라클 페이징 쿼리

1. 페이지 수를 계산하여 셀렉트 SELECT * FROM (SELECT T0.*, FLOOR((ROWNUM - 1) / 한 페이지에 보여지는 row수  + 1) PAGE          FROM (                   -- 쿼리를 할 실제..

sinpk.tistory.com

 

↑다른블로그인데 참고하기

 

 

 

 

 

board_5 에 페이징 추가하기

 

 

조회수는 구현이 안됨 페이징만 볼것

[BoardController.java]
package edu.bit.board.controller;

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 edu.bit.board.page.Criteria;
import edu.bit.board.page.PageVO;
import edu.bit.board.service.BoardService;
import edu.bit.board.vo.BoardVO;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;

@Log4j // 롬복이
@AllArgsConstructor // 롬복이
@Controller
public class BoardController {

	// 5버전으로 오면서 @Autowired 를 안넣어줘도 알아서 객체생성됨
	private BoardService boardService;

	@GetMapping("/list")
	// @PostMapping("/list")
	// @RequestMapping아니고 GetMapping으로 버전바뀌면서 씀
	public void list(Model model) {// 만약 void면 list.jsp(함수명)를 리턴시킨다.
									// String으로 주면 걍 return list;
		log.info("list()");

		model.addAttribute("list", boardService.getList());
		// BoardService에서 getlist()에 자동으로 담아진다.
		System.out.println("사이즈" + boardService.getList().size());
	}

	@GetMapping("/write_view")
	// @PostMapping("/write_view")
	public String write_view(Model model) {
		log.info("write_view()");
		model.addAttribute("list", boardService.getList());
		return "write_view";
	}

	// post로 넘어오니까
	// @PostMapping("/write")
	@GetMapping("/write")
	public String write(BoardVO boardVO, Model model) throws Exception {
		log.info("write()");
		boardService.writeBoard(boardVO);
		return "redirect:list";
	}

	@GetMapping("/content_view")
	// @PostMapping("/content_view")
	public String content_view(BoardVO boardVO, Model model) throws Exception {
		log.info("content_view()");
		model.addAttribute("content_view", boardService.getBoard(boardVO.getbId()));
		// 아이디만 들어가면 돼서
		return "content_view";
	}

	@GetMapping("/delete")
	// @PostMapping("/delete")
	public String delete(BoardVO boardVO, Model model) throws Exception {
		log.info("delete()");
		boardService.deleteBoard(boardVO);
		return "redirect:list";
	}

	@GetMapping("/modify")
	public String modify(BoardVO boardVO, Model model) throws Exception {
		boardService.modifyBoard(boardVO);
		return "redirect:list";
	}

	// 작성글 답변 페이지
	@GetMapping("/reply_view")
	public String reply_view(BoardVO boardVO, Model model) throws Exception {
		log.info("reply_view()");
		model.addAttribute("reply_view", boardService.getReply(boardVO.getbId()));
		return "/reply_view";
	}

	// 작성글 답변
	@PostMapping("/reply")
	public String reply(BoardVO boardVO, Model model) throws Exception {
		log.info("reply()");
		boardService.replyBoard(boardVO);
		return "redirect:list";
	}

	// 페이징
	@GetMapping("/list2")
	public void list2(Criteria cri, Model model) {
		log.info("list() 호출");
		log.info(cri);
		model.addAttribute("list2", boardService.getList(cri));

		int total = boardService.getTotalCount(cri);
		log.info("total" + total);
		model.addAttribute("pageMaker", new PageVO(cri, total));
		// cri, total(전체 데이터 개수), new PageDTO(cri, total)->paging관련 파라미터 계산됨->list.jsp
	}

}

 

[Criteria.java]
package edu.bit.board.page;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Getter
@Setter // 롬보기로 get set tostring 만들기
public class Criteria {
	// 페이징 처리를 위해선 페이지 번호와
	// 한페이지당 몇개의 데이터를 보여줄것이지 결정되어야함.
	private int pageNum;// 페이지 번호
	private int amount;// 한페이당 몇개의 데이터를 보여줄것인가?

	public Criteria() {
		this(1, 5);// 기본값 1페이지 10개로 지정; - this는 생성자를 호출
	}

	public Criteria(int pageNum, int amount) {
		this.pageNum = pageNum;
		this.amount = amount;
	}

}
[PageVO.java]
package edu.bit.board.page;

import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Setter
@Getter
public class PageVO {
//페이징 처리할때 필요한 정보들
	private int startPage;// 한번에 보여지는 페이지 시작번호
	private int endPage; // 화면에 보여지는 끝번호
	private boolean prev, next;// 이전과 다음으로 이동가능한 링크 표시

	private int total;// 전체가 나와야 위에 변수들이 조합이 되어서 세팅이 가능하다.
	private Criteria cri;

	public PageVO(Criteria cri, int total) {
		this.cri = cri;// 1번페이지에 10개 뿌리기
		this.total = total;// 전체 몇개가 있는지 알아야 세팅이 됨

		// 예:현재 페이지가 13이면 13/10 = 1.3 올림 → 2 끝페이지는 2*10=20
		this.endPage = (int) (Math.ceil(cri.getPageNum() / 5.0)) * 5;
		// 10.0개를 따로 변수지정해서 넣어도 상관없긴하지만 10개이상인 경우는 거의 없기 때문에 그냥 다이렉트로 넣는다.
		// startPage는 1, endPage는 10이 나오기위한 공식

		this.startPage = this.endPage - 4;

		// Total을 통한 endPage의 재계산
		// 10개씩 보여주는 경우 전체 데이터 수가 80개라고 가정하면 끝번호는 10이 아닌 8이 됨.
		int realEnd = (int) (Math.ceil((total * 1.0) / cri.getAmount()));

		if (realEnd <= this.endPage) {
			this.endPage = realEnd;
		}

		// 시작번호가 1보다 큰경우 존재
		this.prev = this.startPage > 1;// prev는 startPage가 1이라도 있게되면 존재

		// realEnd가 끝번호(endPage)보다 큰 경우에만 존재
		this.next = this.endPage < realEnd;

	}

	// 쿼리 만듦
	public String makeQuery(int page) {
		UriComponents uriComponentsBuilder = UriComponentsBuilder.newInstance().queryParam("pageNum", page)
				// pageNum = 3

				.queryParam("amount", cri.getAmount()) // pageNum=3&amount=10
				.build(); // ?pageNum=3&amount=10
		return uriComponentsBuilder.toUriString(); // ?pageNum=3&amount=10 리턴
	}

}
[BoardService.java]
package edu.bit.board.service;

import java.util.List;

import edu.bit.board.page.Criteria;
import edu.bit.board.vo.BoardVO;

public interface BoardService {
	public List<BoardVO> getList();

	public void writeBoard(BoardVO boardVO);
	// controller에서 write를 create한것-이제 자손이 구현할차례
	// -BoardServiceImpl에서!

	public BoardVO getBoard(int getbId);

	public void deleteBoard(BoardVO boardVO);

	public void modifyBoard(BoardVO boardVO);

	// 답변글 작성 이동
	public BoardVO getReply(int getbId);

	// 답변글 작성
	public void replyBoard(BoardVO boardVO);

	//페이징처리
	public List<BoardVO> getList(Criteria cri);

	public int getTotalCount(Criteria cri);

}
[BoardServiceImpl.java]
package edu.bit.board.service;

import java.util.List;

import org.springframework.stereotype.Service;

import edu.bit.board.mapper.BoardMapper;
import edu.bit.board.page.Criteria;
import edu.bit.board.vo.BoardVO;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;



@Log4j
@Service
@AllArgsConstructor
public class BoardServiceImpl implements BoardService {

	private BoardMapper mapper;
	// 전처럼 위에 @안써도 자동으로 객체 생성해서 들어감

	@Override
	public List<BoardVO> getList() {
		log.info("getList.......");
		log.info("getList...." + mapper.getList().size());
		System.out.println("getList...." + mapper.getList().size());
		return mapper.getList();
	}

	@Override
	public void writeBoard(BoardVO boardVO) {

		mapper.insert(boardVO);
	}

	@Override
	public BoardVO getBoard(int bId) {
		log.info("getBoard.......");
		return mapper.read(bId);

	}

	@Override
	public void deleteBoard(BoardVO boardVO) {
		log.info("getDelete.......");

		mapper.delete(boardVO);
	}

	@Override
	public void modifyBoard(BoardVO boardVO) {
		log.info("getmodify.......");
		mapper.modify(boardVO);
	}

	// 답글 페이지
	@Override
	public BoardVO getReply(int bId) {
		log.info("getBoard()");
		return mapper.reply_view(bId);
	}

	// 답글 수행
	@Override
	public void replyBoard(BoardVO boardVO) {
		mapper.reply(boardVO);
		mapper.replyShape(boardVO);
		log.info("replyBoard()");
	}

	// 페이징
	@Override
	public List<BoardVO> getList(Criteria cri) {
		
		return mapper.getPaging(cri);
	}

	@Override
	public int getTotalCount(Criteria cri) {
		
		return mapper.getTotalCnt(cri);
	}	

}
[BoardVO.java]
package edu.bit.board.vo;

import java.sql.Date;


public class BoardVO {
	private int bId;
	private String bName;
	private String bTitle;
	private String bContent;
	private Date bDate;
	private int bHit;
	private int bGroup;
	private int bStep;
	private int bIndent;
	
	public BoardVO() {

	}

	public BoardVO(int bId, String bName, String bTitle, String bContent, Date bDate, int bHit, int bGroup,
			int bStep, int bIndent) {

		this.bId = bId;
		this.bName = bName;
		this.bTitle = bTitle;
		this.bContent = bContent;
		this.bDate = bDate;
		this.bHit = bHit;
		this.bGroup = bGroup;
		this.bStep = bStep;
		this.bIndent = bIndent;
	}

	public int getbId() {
		return bId;
	}

	public void setbId(int bId) {
		this.bId = bId;
	}

	public String getbName() {
		return bName;
	}

	public void setbName(String bName) {
		this.bName = bName;
	}

	public String getbTitle() {
		return bTitle;
	}

	public void setbTitle(String bTitle) {
		this.bTitle = bTitle;
	}

	public String getbContent() {
		return bContent;
	}

	public void setbContent(String bContent) {
		this.bContent = bContent;
	}

	public Date getbDate() {
		return bDate;
	}

	public void setbDate(Date bDate) {
		this.bDate = bDate;
	}

	public int getbHit() {
		return bHit;
	}

	public void setbHit(int bHit) {
		this.bHit = bHit;
	}

	public int getbGroup() {
		return bGroup;
	}

	public void setbGroup(int bGroup) {
		this.bGroup = bGroup;
	}

	public int getbStep() {
		return bStep;
	}

	public void setbStep(int bStep) {
		this.bStep = bStep;
	}

	public int getbIndent() {
		return bIndent;
	}

	public void setbIndent(int bIndent) {
		this.bIndent = bIndent;
	}

}
[BoardMapper.java]
package edu.bit.board.mapper;

import java.util.List;

import edu.bit.board.page.Criteria;
import edu.bit.board.vo.BoardVO;

public interface BoardMapper {
	public List<BoardVO> getList();

	public void insert(BoardVO boardVO);
	// BoardServiceImpl에서 create - 이제 자손이 구현 - xml이 구현한다.

	public BoardVO read(int bno);

	public void delete(BoardVO boardVO);

	public void modify(BoardVO boardVO);

	// 답변글 작성페이지 이동
	public BoardVO reply_view(int bId);

	// 답변글 작성하기
	public void reply(BoardVO boardVO);

	// 답변글 형태 업데이트하기
	public void replyShape(BoardVO boardVO);

	// 조회수 증가
	public void upHit(int bId);

	// 페이징처리
	public List<BoardVO> getPaging(Criteria cri);

	// 전체 게시글 갯수
	public int getTotalCnt(Criteria cri);

}
[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.bit.board.mapper.BoardMapper">
	<!-- ↑인터페이스 -->

	<!--↓인터페이스 BoardMapper의 자식이 구현해야하는데 id=""로 구현 id명 꼭 맞춰줄것 -->
	<select id="getList" resultType="edu.bit.board.vo.BoardVO">
   <![CDATA[
      select * from mvc_board order by bGroup desc, bStep asc
   ]]>
	</select>

	<!-- insert로 넣었으니까 insert로. 근데 select를 넣어도 실행되긴함 -->

	<!-- insert는 result가 없다. -->
	<!--변수로 넘어오게 되는것엔 #{변수명} 으로 써주기 -->
	<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)
   ]]>
    	 <!--★★★rownum as rnum 을 안해주면 따로 생성이 안되고 rownum이 한번에 다 온다★★★-->
	</insert>

	<select id="read" resultType="edu.bit.board.vo.BoardVO">
   <![CDATA[
      select * from mvc_board where bId = #{bId}
   ]]>
	</select>

	<delete id="delete">
   <![CDATA[
      delete from mvc_board where bId = #{bId}
   ]]>
	</delete>

	<update id="modify">
<![CDATA[
update mvc_board set bName = #{bName}, bTitle = #{bTitle}, bContent = #{bContent} where bId = #{bId}
]]>
	</update>


	<!-- 답변글 작성 이동 -->
	<select id="reply_view" resultType="edu.bit.board.vo.BoardVO">
	<![CDATA[
		select * from mvc_board where bId = #{bId}
	]]>
	</select>

	<!-- 답변글 쓰기 -->
	<insert id="reply">
	<![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>

	<!-- 답변글 형태 업데이트 -->
	<update id="replyShape">
	<![CDATA[
		update mvc_board set bStep = bStep + 1 where bGroup = #{bGroup} and bStep > #{bStep}]]>
	</update>

	<!-- 조회수 증가 -->
	<update id="upHit">
	<![CDATA[
		update mvc_board set bHit = bHit+1 where bId = #{bId}
	]]>
	</update>

	<!-- 쿼리문 -->
	<select id="getPaging"
		resultType="edu.bit.board.vo.BoardVO">
   <![CDATA[
          
	     select * from ( SELECT ROWNUM AS rnum, A.* FROM (
                select * from mvc_board order by bGroup desc, bStep asc
           	 ) A where rownum <= #{pageNum} * #{amount}
  	 ) where rnum > (#{pageNum}-1) * #{amount}
   ]]>
	</select>

		<select id="getTotalCnt" resultType="int">
	
		select count(*) from mvc_board
		
	</select>

</mapper>

 

[list2.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<table width="500" cellpadding="0" cellspacing="0" border="1">
		<tr>
			<td>번호</td>
			<td>이름</td>
			<td>제목</td>
			<td>날짜</td>
			<td>히트</td>
		</tr>
		<c:forEach items="${list2}" var="dto">
			<tr>
				<td>${dto.bId}</td>
				<td>${dto.bName}</td>
				<td><c:forEach begin="1" end="${dto.bIndent}">[re]</c:forEach>
					<a href="content_view?bId=${dto.bId}">${dto.bTitle}</a></td>
				<td>${dto.bDate}</td>
				<td>${dto.bHit}</td>
			</tr>
		</c:forEach>
		<tr>
			<td colspan="5"><a href="write_view">글작성</a></td>
		</tr>
	
	</table>
	<!-- 페이징처리 코드 -->
	<c:if test="${pageMaker.prev}">
		<a href="list2${pageMaker.makeQuery(pageMaker.startPage - 1) }">pre</a>
	</c:if>

	<c:forEach begin="${pageMaker.startPage }" end="${pageMaker.endPage }"
		var="idx">
		<c:out value="${pageMaker.cri.pageNum == idx?'':''}" />
		<a href="list2${pageMaker.makeQuery(idx)}">${idx}</a>
	</c:forEach>

	<c:if test="${pageMaker.next && pageMaker.endPage > 0}">
		<a href="list2${pageMaker.makeQuery(pageMaker.endPage +1) }">next</a>
	</c:if>
	<br>
	
	
<!-- 
	<button type="submit">글쓰기</button> -->

</body>
</html>

 

<a href="list2${pageMaker.makeQuery(idx)}">${idx}</a> 이 부분은 이렇게 나온다. 똑같은 함수인데 그저 forEach문 돌린것.

<a href="list2?pageNum=$(indx)&amount=10>${idx}</a> 랑 똑같다

 

 

 

↓구현화면

 

 

 

po9357.github.io/spring/2019-05-28-Board_Paging/

참고

 

[Spring] 스프링 게시판 만들기 - 페이징(Paging) 처리하기

글 목록을 보여줄 때 더 깔끔하고 편리하게 보여주기 위한 페이징 처리에 대해 알아본다

po9357.github.io

 

 

 

============================================================================

 

 

 

 

 

 

 

 

 

 

DB

[1장]데이터베이스

ddl : 컬럼명 바꾸는것 . drop colunm

dml : update delete이런거

dcl : revoke commit

 

 

↑투플, 레코드, 행 이런 용어 외워두기

 

 

 

db설계 3요소는 반드시 외우기(개논물)

개념적설계 논리적설계 물리적설계

 

 

 

 

[2장]데이터 모델링

 

개념적 설계

: ER

 

TDD 켄트백 책읽기

 

 

 

 

 

 

 

오늘의문제

1.emp list 페이징을 구현하시오.

 

↓구현결과

[EmpController.java]
@GetMapping("/list2")
	public void list2(Criteria cri, Model model) {
		log.info("list() 호출");
		log.info(cri);
		model.addAttribute("list2", empService.getList(cri));

		int total = empService.getTotalCount(cri);
		log.info("total" + total);
		model.addAttribute("pageMaker", new PageVO(cri, total));
		// cri, total(전체 데이터 개수), new PageDTO(cri, total)->paging관련 파라미터 계산됨->list.jsp
	}
[EmpServie.java]
public List<EmpVO> getList(Criteria cri);
	
	public int getTotalCount(Criteria cri);
[EmpserviceImpl.java]
	@Override
	public List<EmpVO> getList(Criteria cri) {
	
		return mapper.getPaging(cri);
	}

	@Override
	public int getTotalCount(Criteria cri) {
		
		return mapper.getTotalCnt(cri);
	}
[EmpMapper.java]
public List<EmpVO> getPaging(Criteria cri);

	public int getTotalCnt(Criteria cri);
[PageVO.java]
package edu.bit.board.page;

import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Setter
@Getter
public class PageVO {

	private int startPage;
	private int endPage;
	private boolean prev, next;

	private int total;
	private Criteria cri;

	public PageVO(Criteria cri, int total) {
		this.cri = cri;
		this.total = total;

		this.endPage = (int) (Math.ceil(cri.getPageNum() / 5.0)) * 5;
		this.startPage = this.endPage - 4;

		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;
	}

	public String makeQuery(int page) {
		UriComponents uriComponentsBuider = UriComponentsBuilder.newInstance().queryParam("pageNum", page)

				.queryParam("amount", cri.getAmount()).build();
		return uriComponentsBuider.toUriString();
	}
}
[Criteria.java]
package edu.bit.board.page;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Setter
@Getter
public class Criteria {
	
	private int pageNum;
	private int amount;
	
	public Criteria() {
		this(1,5);
	}
	public Criteria(int pageNum, int amount) {
		this.pageNum = pageNum;
		this.amount = amount;
	}

}
[EmpMapper.xml]
	<select id="getPaging" resultType="edu.bit.board.vo.EmpVO">
   <![CDATA[
	     select * from (SELECT ROWNUM AS rnum, A.* FROM (
                select * from emp02) A where rownum <= #{pageNum} * #{amount}
  	 )where rnum > (#{pageNum}-1) * #{amount}
  	 
 
   ]]>
	</select>


	<select id="getTotalCnt" resultType="int">	
	<![CDATA[ 
	select count(*) from emp02
	]]>
	</select>
[list2.jsp]-부트스트랩 코드는 생략
	<div class="card-body">
			<div class="table-responsive">
				<table class="table table-bordered" id="dataTable" width="100%"
					cellspacing="0">
					<thead>
						<tr>
							<td>사원번호</td>
							<td>사원이름</td>
							<td>사원직급</td>
							<td>매니저</td>
							<td>입사일</td>
							<td>급여</td>
							<td>커미션</td>
							<td>부서</td>
						</tr>
					<tbody>
						<c:forEach items="${list2}" var="dto">
						<tr>
							<td>${dto.empno}</td>
							<td>${dto.ename}</td>
							<td>${dto.job}</td>
							<td>${dto.mgr}</td>
                            <td>${dto.hiredate}</td>
							<td>${dto.sal}</td>
							<td>${dto.comm}</td>
							<td>${dto.deptno}</td>
						</tr>
						</c:forEach>
					</tbody>
				</table>
			
            <!-- 페이징 -->
		<ul class="pagination">
		<li class="dataTables_paginate paging_simple_numbers"><c:if
					test="${pageMaker.prev}">
				<a href="list2${pageMaker.makeQuery(pageMaker.startPage - 1) }">prev</a>
				</c:if>
			<li class="paginate_button page-item active"><c:forEach
						begin="${pageMaker.startPage }" end="${pageMaker.endPage }"
							var="idx">
						<c:out value="${pageMaker.cri.pageNum == idx?'':''}" />
				<a href="list2${pageMaker.makeQuery(idx)}">${idx}</a>
					</c:forEach></li>

				<li class="paginate_button page-item next disabled"><c:if
				test="${pageMaker.next && pageMaker.endPage > 0}">
			<a href="list2${pageMaker.makeQuery(pageMaker.endPage +1) }">next
				</a>
				</c:if></li>
				</ul>
				<br>


				<div class="card-header py-3 text-center"
						style="margin-top: 5px">
						<h6 class="m-0 font-weight-bold text-primary">
							<a href="write_view">사원정보입력</a>
						</h6>
			</div>
                                
<style>/* 페이징 가운데 정렬 */
ul.pagination {
	display: table;
	margin-left: auto;
	margin-right: auto;
}
</style>                        
        

2.오라클 11g 이하에서의 페이징 처리 방법(DB sql관련)은 ?

 ROWNUM을 이용해서 페이징 처리를한다.

--sql 처리 순서
--1. FROM/WHERE 절이 먼저 처리됩니다.
--2. ROWNUM이 할당되고 FROM/WHERE 절에서 전달되는 각각의 출력 로우에 대해 증가(increment) 됩니다.
--3. SELECT가 적용됩니다.
--4. GROUP BY 조건이 적용됩니다.
--5. HAVING이 적용됩니다.
--6. ORDER BY 조건이 적용됩니다

 


3.rownum 에 대하여 설명하시오.

 

쿼리문에 순번을 매겨서 순번대로 출력하게 하는 함수 - 예를들어 order by로 먼저 정렬 후 rownum으로 순번을 매겨준다.

SELECT *
FROM  (SELECT *
       FROM   t1
       ORDER BY c1) --이렇게 먼저 from절 바로 뒤에 묶어 준다.
WHERE  ROWNUM >= 1
AND    ROWNUM <= 5;

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

21.02.03 [051] Wed  (0) 2021.02.03
21.02.02 [050] Tue  (0) 2021.02.02
21.01.29 [048] Fri  (0) 2021.01.29
21.01.28 [047] Thu  (0) 2021.01.28
21.01.27 [046] Wed  (0) 2021.01.27

댓글