ホームページ  >  記事  >  Java  >  JavaでのMyBatisのページング実装メソッドは何ですか?

JavaでのMyBatisのページング実装メソッドは何ですか?

PHPz
PHPz転載
2023-05-07 08:04:16685ブラウズ

はじめに

ページングは​​開発において回避できないハードルです。データの量が多い場合、すべてのデータを一度にチェックするのは現実的ではないため、通常はページ単位でクエリを実行します。これにより、サーバーへの負荷が軽減され、速度と効率が向上します。また、フロントエンド レンダリングの負荷も軽減されます。

注: 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のページング実装メソッドは何ですか?

##10 の場合は 0 を入力:

JavaでのMyBatisのページング実装メソッドは何ですか?

概要:

  • 制限0,10;

  • 0 は 0 番目のデータから開始することを意味します

  • 10 は 10 個のデータをチェックすることを意味します

  • 2 番目のページに到達すると、制限は 10,10;

2. RowBounds ページング (推奨されません)

RowBounds はページングを省略するのに役立ちますコンテンツが制限されている場合は、ビジネス層のページングに注意するだけで済みます。指定したデータを渡す必要はありません。

ただし、これは論理ページングに属します。つまり、SQL クエリは実際にすべてのデータをクエリしますが、これはビジネス層でのページングのみです。より多くのメモリを消費し、データは時間内に更新されません。多少の遅れが生じる可能性があります。お勧めしません!

RowBounds オブジェクトには、オフセットと制限という 2 つのプロパティがあります。

  • #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>
実行して結果を確認します:

3. Mybatis_PageHelper ページング プラグインJavaでのMyBatisのページング実装メソッドは何ですか?

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 は依然として非常に使いやすく、物理的なページングでもあります。

実際には、通常は 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();
}
Extension:

//获取第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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。