SSM 수 동 으로 페이지 논리 구현 - 비 PageHelper 방식

첫 번 째 방법: 모든 데 이 터 를 조회 하고 페이지 를 나눈다.
분석:
  • 페이지 를 나 눌 때 프런트 에서 들 려 오 는 두 개의 인 자 를 얻어 야 한다. 각각 pageNo (몇 페이지 데이터), pageSize (각 페이지 의 항목 수) 이다.
  • 이 두 매개 변수 에 따라 전단 에 필요 한 데 이 터 를 계산 하 는 것 은 데이터 list 의 시작 색인 과 끝 색인 을 찾 는 것 이다.
  • List 의 subList 방법 으로 조 회 된 모든 데 이 터 를 분할 하고 되 돌려 줍 니 다.

  • 실현 과정
    1. 매개 변수 가 져 오기
    여기 서 돌아 온 것 은 json 데이터 인터페이스 입 니 다. 실현 방법 은 service 층 에 있 습 니 다.
    @ResponseBody
    @GetMapping("/allPage")
    public String findAllPage(
       @RequestParam(required = true,defaultValue = "1") Integer pageNo,
       @RequestParam(required = false,defaultValue = "5") Integer pageSize) {
    	return customerService.findAllPage(pageNo,pageSize);
    }
    

    2. 데이터 캡 처
    CustomerServiceImpl.java
  • 안에 있 는 pageUtil 류, iter Customer () 방법, JSonUtil 류 는 아래 에 소개 되 어 있 습 니 다. 이러한 유형 이나 방법 을 추출 하 는 목적 은 코드 의 재 활용 성 을 향상 시 키 고 코드 의 번 거 로 움 을 줄 이 는 것 입 니 다.
  • @Override
    public String findAllPage(Integer pageNo, Integer pageSize) {
        List<Customer> customers = customerDao.findAll();
        List<Map<String, String>> resultList = new ArrayList<>();
        PageUtil<Customer> pageUtil = new PageUtil<>();
        for (Customer customer : pageUtil.pageList(customers, pageNo, pageSize){
            resultList.add(iterCustomer(customer));
        }
        return JsonUtil.toJSON(resultList);
    }
    

    PageUtil.java
  • 이 종 류 는 제 가 추출 한 List 를 캡 처 하 는 도구 류 입 니 다. 대상 을 만 들 때 일반적인 형식 을 전달 해 야 합 니 다. 유형 은 목록 List 의 유형 입 니 다.
  • 이러한 대상 이 pagerest 방법 을 호출 하면 길 이 를 잘 자 른 List 배열 을 되 돌려 줄 수 있 습 니 다.
  • pagerest 방법 은 세 개의 매개 변수 가 있 습 니 다.
  • 첫 번 째 매개 변 수 는 모든 데 이 터 를 저장 하 는 List 배열 입 니 다.
  • 두 번 째 매개 변 수 는 페이지 번호 이다.
  • 세 번 째 매개 변 수 는 각 페이지 에 표 시 된 데이터 항목 수 입 니 다.

  • public class PageUtil<T> {
        private int beginIndex;//    
        private int endIndex;//    
    
        public List<T> pageList(List<T> list, int pageNo, int pageSize) {
            int size = list.size();
    
            beginIndex = (pageNo - 1) * pageSize;
            endIndex = pageNo * pageSize > size ? size : pageNo * pageSize;
            List<T> resultList = list.subList(beginIndex, endIndex);
            return resultList;
        }
    }
    

    iter Customer () 방법
  • 역할 은 하나의 map 에 Customer 인 스 턴 스 를 저장 하 는 값 을 얻 고 키 로 표시 하 는 것 입 니 다.
  • 매개 변 수 는 포장 이 필요 한 유형 대상 이다.
  • 반환 값 은 하나의 Map 대상 이 고 그 안에 매개 변수 류 대상 의 일부 정 보 를 저장 합 니 다.
  • public Map<String, String> iterCustomer(Customer customer) {
            Map<String, String> resultMap = new HashMap<>();
            resultMap.put("id", customer.getId().toString());
            resultMap.put("name", customer.getName());
            resultMap.put("phone", customer.getPhone());
            resultMap.put("email", customer.getEmail());
            return resultMap;
    }
    

    JsonUtil.java
  • 잭 슨 을 봉인 하고 제 이 슨 문자열 을 되 돌려 주 는 역할 을 합 니 다.
  • public class JsonUtil {
        //  jackson    json       
        private static ObjectMapper MAPPER = new ObjectMapper();
        static String jsonString=null;
    
        public static String toJSON(Object object){
            try {
                //jackson   object    json     
                jsonString = MAPPER.writeValueAsString(object);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return jsonString;
        }
    }
    

    두 번 째 방법: SQL 로 페이지 를 나 누 어 현재 페이지 에 필요 한 데이터 만 조회 합 니 다.
    분석:
  • 첫 번 째 방법 은 데이터 양 을 비교 할 때 사용 할 수 있 지만 데이터 양 이 매우 많 을 때 만약 에 우리 가 특정한 페이지 의 몇 가지 데이터 만 필요 하고 모든 데 이 터 를 찾 으 면 필요 하지 않 거나 대가 가 너무 크다 고 할 수 있다. 모든 우 리 는 지금 두 번 째 페이지 방식 을 사용한다.
  • 두 번 째 방법 은 첫 번 째 방법 과 유사 합 니 다. 전단 에서 들 려 오 는 페이지 번호 와 각 페이지 에 표 시 된 항목 수 를 가 져 오고 사용자 정의 SQL 문 구 를 통 해 데이터 베 이 스 를 조회 하여 필요 한 데 이 터 를 얻 을 수 있 습 니 다.
  • sql 페이지 참조: Mysql 복잡 한 조회 또는 [MySQL] 조건 조회 의 정렬 집합 페이지 조회
  • 실현 과정
    1. 매개 변수 가 져 오기
    분석 하 다.
  • 매개 변수 에서 pageNo 는 전단 에서 들 려 오 는 페이지, 즉 몇 페이지 입 니 다.pageSize 는 페이지 마다 표시 할 항목 수 입 니 다. 기본 값 은 5 입 니 다.
  • SQL 페이지 를 사용 할 때 검색 어 에 필요 한 매개 변 수 는 데이터 베 이 스 를 표시 하 는 색인 과 각 페이지 에 표 시 된 데이터 항목 수 입 니 다.
  • 색인 을 계산 하 는 공식: 시작 색인 = (현재 페이지 - 1) * 각 페이지 에 표 시 된 항목 수;

  • 여기 서 전단 에서 들 려 오 는 페이지 수가 전체 데이터 의 가장 큰 페이지 수 를 초과 하 는 지, 초과 하면 최대 페이지 수 를 표시 하 는 지 판단 해 야 한다.
  • 최대 페이지 수 계산: int maxPage =(int) Math.ceil(count/pageSize.doubleValue());

  • CustomerController.java
    @Controller
    public class CustomerController {
        @Autowired
        CustomerService customerService;
        
    	@ResponseBody
        @GetMapping("/allSql")
        public String findAllPageSql(
            @RequestParam(required = true,defaultValue = "1") Integer pageNo,
            @RequestParam(required = false,defaultValue = "5") Integer pageSize) {
            /**
             * pageSize         
             * pageNo    ,sql                ;
             *     :      = (      - 1) *        
             */
            //    
            int count = customerService.count();
            //      
            int maxPage =(int) Math.ceil(count/pageSize.doubleValue());
            //                 :
            pageNo = pageNo>maxPage?maxPage:pageNo;
            //        
            int index = (pageNo - 1) * pageSize > count ? count : (pageNo - 1) * pageSize;
            return customerService.findAllPageSql(index, pageSize);
        }
    }
    

    2. 레이 어 링 호출 방법
    CustomerServiceImpl.java
    @Service
    public class CustomerServiceImpl implements CustomerService {
        @Autowired
        CustomerDao customerDao;
    	@Override
        public String findAllPageSql(Integer index, Integer pageSize) {
            return JsonUtil.toJSON(customerDao.findAllPageSql(index, pageSize));
        }
    }
    

    CustomerDao.java
    public interface CustomerDao {   
    	List<Customer> findAllPageSql(Integer index,Integer pageSize);
    }
    

    3. 맞 춤 형 sql
    CustomerMapper.xml
  • 이 매개 변 수 는 두 개 입 니 다. 매개 변 수 를 가 져 올 때 \ # {param 1} \ # {param 2} 을 사용 하거나 맵 을 패키지 하 는 형식 으로 전 파 됩 니 다.
  • sql 페이지 참조: Mysql 복잡 한 조회 또는 [MySQL] 조건 조회 의 정렬 집합 페이지 조회
  • 
    
    <mapper namespace="com.vue.dao.CustomerDao">
        <select id="findAllPageSql" parameterType="java.lang.Integer" resultType="com.vue.entity.Customer">
            SELECT * FROM t_customer LIMIT #{param1},#{param2}
        select>
    mapper>
    

    Mapper. xml 맵 파일 에서 여러 매개 변수 참고 가 져 오기:
    Mybatis 의 Mapper. xml 맵 파일 sql 조회 수신 여러 매개 변수 또는
    Mybatis 의 Mapper. xml 맵 파일 sql 조회 수신 여러 매개 변수
    이상
  • 이상 은 SSM 프레임 워 크 가 PageHelper 플러그 인 을 사용 하지 않 고 페이지 를 나 누 는 전 과정 입 니 다. 두 번 째 맞 춤 형 SQL 조 회 를 추천 합 니 다. 이 조회 방법 은 페이지 논리 에 더욱 부합 되 고 매번 필요 한 데이터 만 조회 하 는 것 이 아니 라 모든 데 이 터 를 조회 해 야 하기 때문에 효율 이 높 습 니 다.
  • 문제 가 있 으 면 같이 교류 할 수 있다.
  • my blog
  • 메 일 박스:[email protected]

  • 좋은 웹페이지 즐겨찾기