> Java > java지도 시간 > 본문

Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?

PHPz
풀어 주다: 2023-05-07 08:04:16
앞으로
721명이 탐색했습니다.

머리말

페이지 매김은 개발 과정에서 넘어갈 수 없는 장애물입니다! 데이터의 양이 많으면 모든 데이터를 한꺼번에 확인하는 것은 비현실적이기 때문에 주로 페이지 단위로 쿼리를 진행하는데, 이는 서버에 대한 부담을 줄이고 속도와 효율성을 향상시킵니다! 또한 프런트엔드 렌더링에 대한 부담도 줄어듭니다!

참고: Java에서 허용하는 최대 정수는 2147483647이므로, Limit에서 사용할 수 있는 최대 정수도 2147483647입니다. 한 번에 많은 양의 데이터를 검색하면 메모리 오버플로가 발생할 수 있으므로 빅데이터 쿼리에서는 주의해서 사용하세요. 상황!

1. 페이징 제한

문법:

limit ${startPos},${pageSize}
로그인 후 복사

실제 프로젝트에서는 일반적으로 다음과 같이 null 판단을 추가합니다.

<if test="startPos!=null and pageSize!=null">
    limit ${startPos},${pageSize}
</if>
로그인 후 복사

비즈니스 계층 코드:

<select id="getUserInfo1" parameterType="map" resultType="dayu">
    select * from user
    <if test="startPos!=null and pageSize!=null">
        limit ${startPos},${pageSize}
    </if>
</select>
로그인 후 복사
List<User> getUserInfo1(Map<String,Object> map);
로그인 후 복사
@Test
 public void selectUser() {
     SqlSession session = MybatisUtils.getSession();
     UserMapper mapper = session.getMapper(UserMapper.class);
     //这里塞值
      Map<String,Object> parms = new HashMap<>();
      parms.put("startPos","0");
      parms.put("pageSize","5");
     List<User> users = mapper.getUserInfo1(parms);
     for (User map: users){
         System.out.println(map);
    }
     session.close();
}
로그인 후 복사

실행 결과:

Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?

0,10이 전달된 경우:

Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?

요약:

  • limit 0,10;

  • 0은 0번째 데이터부터 시작한다는 뜻입니다

  • 10 뜻은 10개의 데이터 확인

  • 두 번째 페이지에 도달하면 제한은 10,10입니다.

두 번째, RowBounds 페이징(권장하지 않음)

RowBounds는 제한 내용을 생략하는 데 도움이 됩니다. 비즈니스에 추가하세요. 페이징 레이어를 따라가시면 됩니다! 지정된 데이터를 전달할 필요가 없습니다!

그러나 이는 논리적 페이징에 속합니다. 즉, SQL 쿼리는 실제로 모든 데이터를 쿼리하며 이는 비즈니스 계층에서만 페이징됩니다. 더 많은 메모리를 차지하고 데이터가 제때 업데이트되지 않으며 오류가 발생할 수 있습니다. 어느 정도 지연! 권장하지 않습니다!

RowBounds 객체에는 오프셋과 한계라는 두 가지 속성이 있습니다.

  • offset:시작 행 번호

  • limit:필요한 데이터 행 수

따라서 꺼내는 데이터는 오프셋+1 행부터 시작하여 제한 행을 가져옵니다

비즈니스 계층 코드:

@Test
public void selectUserRowBounds() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    // List<User> users = session.selectList("com.dy.mapper.UserMapper.getUserInfoRowBounds",null,new RowBounds(0, 5));
    List<User> users = mapper.getUserInfoRowBounds(new RowBounds(0,5));
    for (User map: users){
        System.out.println(map);
    }
    session.close();
}
로그인 후 복사
List<User> getUserInfoRowBounds(RowBounds rowBounds);
로그인 후 복사
<select id="getUserInfoRowBounds" resultType="dayu">
   select * from user
</select>
로그인 후 복사

실행 보기 결과:

Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?

3. Mybatis_PageHelper 페이징 플러그인

jar 패키지 소개:

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>5.1.7</version>
</dependency>
로그인 후 복사

MyBatis 핵심 구성 파일 구성:

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
로그인 후 복사

비즈니스 계층 코드:

@Test
public void selectUserPageHelper() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    //第二种,Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.startPage(1, 3);
    List<User> list = mapper.getUserInfo();
    //用PageInfo将包装起来
    PageInfo page = new PageInfo(list);
    for (User map: list){
        System.out.println(map);
    }
    System.out.println("page:---"+page);
    session.close();
}
로그인 후 복사
로그인 후 복사

실행 결과:

Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?

요약:

PageHelper는 여전히 매우 유용하며 물리적 페이징이기도 합니다!

사실 우리는 일반적으로 두 번째 유형을 더 많이 사용합니다: Mapper 인터페이스 메소드 call

@Test
public void selectUserPageHelper() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    //第二种,Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.startPage(1, 3);
    List<User> list = mapper.getUserInfo();
    //用PageInfo将包装起来
    PageInfo page = new PageInfo(list);
    for (User map: list){
        System.out.println(map);
    }
    System.out.println("page:---"+page);
    session.close();
}
로그인 후 복사
로그인 후 복사

확장:

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
로그인 후 복사

위 내용은 Java에서 MyBatis의 페이징 구현 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿