ページングは開発において回避できないハードルです。データの量が多い場合、すべてのデータを一度にチェックするのは現実的ではないため、通常はページ単位でクエリを実行します。これにより、サーバーへの負荷が軽減され、速度と効率が向上します。また、フロントエンド レンダリングの負荷も軽減されます。
注: 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(); }
実行結果:
##10 の場合は 0 を入力:
概要:
開始行数
したがって、取り出されるデータは、オフセット 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>
3. Mybatis_PageHelper ページング プラグイン
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.7</version> </dependency>
<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 は依然として非常に使いやすく、物理的なページングでもあります。
実際には、通常は 2 番目のタイプをよく使用します:
Mapper インターフェイス メソッド呼び出し@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 中国語 Web サイトの他の関連記事を参照してください。