페이지 매김은 개발 과정에서 넘어갈 수 없는 장애물입니다! 데이터의 양이 많으면 모든 데이터를 한꺼번에 확인하는 것은 비현실적이기 때문에 주로 페이지 단위로 쿼리를 진행하는데, 이는 서버에 대한 부담을 줄이고 속도와 효율성을 향상시킵니다! 또한 프런트엔드 렌더링에 대한 부담도 줄어듭니다!
참고: Java에서 허용하는 최대 정수는 2147483647이므로, Limit에서 사용할 수 있는 최대 정수도 2147483647입니다. 한 번에 많은 양의 데이터를 검색하면 메모리 오버플로가 발생할 수 있으므로 빅데이터 쿼리에서는 주의해서 사용하세요. 상황!
문법:
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(); }
실행 결과:
0,10이 전달된 경우:
요약:
limit 0,10;
0은 0번째 데이터부터 시작한다는 뜻입니다
10 뜻은 10개의 데이터 확인
두 번째 페이지에 도달하면 제한은 10,10입니다.
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>
실행 보기 결과:
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(); }
실행 결과:
요약:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!