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

PHPz
リリース: 2023-05-07 08:04:16
転載
724 人が閲覧しました

はじめに

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

注: 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート