MySqlはページクエリ機能を実装します

MySqlはページクエリ機能を実装します

まず、ページ分割クエリを使用する理由を明確にする必要があります。データが膨大なため、すべてのデータをページに表示することは不可能です。すべてのデータをページに表示すると、クエリ速度が遅くなります。したがって、ページ分割クエリは、①データクエリ、②パフォーマンスの最適化などの問題を解決します(他の問題については補足を歓迎します)。

ページネーション クエリは、真のページネーションと偽のページネーションにも分けられます。

真のページング: データベースで見つかったデータをページに直接表示します。利点は、データベース データの変更がクエリ結果に影響しないことです。欠点は、速度がわずかに遅くなることです。

偽のページング: クエリされたすべてのデータをリスト コレクション キャッシュにカプセル化し、プレゼンテーション層メソッド呼び出しを実行します。データはコレクションとしてカプセル化されてメモリに格納されるため、速度は速くなりますが、データベースが変更された後に不一致が発生するという欠点があります。

2種類のページングにはそれぞれ長所と短所がありますので、状況に応じて使い分けてください。

実際のページング方法は次のとおりです。

1. JavaBeanを作成する

java.io.Serializable をインポートします。
/**
 * ユーザーエンティティクラス * @author 
 *
 */
パブリッククラスUserBeanはSerializableを実装します{
  /**ユーザーID*/
  プライベート int id;
  /**ユーザー名*/
  プライベート文字列名;
  パブリックUserBean() {
  }
  パブリックUserBean(int id, String name) {
    id は、
    this.name = 名前;
  }
  パブリック int getId() {
    ID を返します。
  }
  パブリック void setId(int id) {
    id は、
  }
  パブリック文字列getName() {
    名前を返します。
  }
  パブリック void setName(文字列名) {
    this.name = 名前;
  }
  @オーバーライド
  パブリック文字列toString() {
    "UserBean [id=" + id + "、name=" + name + "]" を返します。
  }
}

2. ページングデータを表示するためのJavaBean

/**
 * ページングデータを表示するために使用されるJavaBeanオブジェクト * @author
 *
 */
java.util.List をインポートします。
パブリッククラス PagenationBean {
  /** 現在のページ番号*/
  プライベート整数 currPage;
  /**ページ総数*/
  プライベート整数totalPage;
  /** 表示用のテーブルデータ */
  プライベートList<UserBean>データリスト;
  パブリック整数 getCurrPage() {
    currPage を返します。
  }
  パブリック void setCurrPage(Integer currPage) {
    this.currPage = currPage;
  }
  パブリック整数 getTotalPage() {
    totalPage を返します。
  }
  パブリック void setTotalPage(整数 totalPage) {
    this.totalPage = 合計ページ;
  }
  パブリックリスト<StuBean> getDataList() {
    データリストを返します。
  }
  パブリック void setDataList(List<StuBean> dataList) {
    this.dataList = データリスト;
  }
}

3. Dao層実装クラス

 @オーバーライド
  public int getTotalCount() { //データの合計数を計算します this.setConnection();
    合計カウント = 0;
    試す {
      ps = con.prepareStatement("t_user から count(*) を選択します");
      rs = ps.executeQuery();
      rs.next() の場合 {
        合計カウント = rs.getInt(1);
      }
    } キャッチ (例外 e) {
      e.printStackTrace();
    ついに
      this.closeConnection();
    }
    totalCount を返します。
  }
  @オーバーライド
  public List<UserBean> getUserListByStartIndex(int ​​StartIndex) { //渡された制限の最初のパラメータに従って、このパラメータの背後にある 10 個のデータを取得します List<UserBean> userList = new ArrayList<>();
    ユーザーBean userBean = null;
    この接続を設定します。
    合計カウント = 0;
    試す {
      ps = con.prepareStatement("t_user limit ? , 10 から * を選択します");
      ps.setInt(1, 開始インデックス);
      rs = ps.executeQuery();
      (rs.next()) の間 {
        ユーザーBean = 新しいStuBean();
        ユーザー Bean の ID を設定します。
        userBean.setName(rs.getString("名前"));
        stuList.add(userBean);
      }
    } キャッチ (例外 e) {
      e.printStackTrace();
    ついに
      this.closeConnection();
    }    
    ユーザーリストを返します。
  }

4. サービス層実装クラス

プライベート IUserDao isd = 新しい UserDaoImpl();
  @オーバーライド
  パブリック int getTotalPage() {
    //データの数を取得します int totalCount = isd.getTotalCount();
    //ページの合計数を計算します: int totalPage = (totalCount + 10 -1)/10;
    totalPage を返します。
  }
  @オーバーライド
  パブリックリスト<UserBean> getUserListByCurrPage(int currPage) {
    //現在のページの開始インデックスを計算します int StartIndex = (currPage - 1) * 10;
    リスト<UserBean> userList = isd.getStuListByStartIndex(StartIndex);
    ユーザーリストを返します。
  }

5. クエリされたデータをページに配置して表示します。

上記の方法では、10 個のデータがページに表示され、計算と分析は次のようになります。

データ項目の合計数: totalCount

ページあたりのエントリ数: pageSize

総ページ数: totalPage

開始インデックス

現在のページ番号 currPage

総ページ数の計算式:

合計数 % ページサイズ

余りが 0 の場合 ——> totalPage = totalCount / pageSize

余りが 0 でない場合 ——> totalPage = totalCount / pageSize + 1

結論: totalPage = (totalCount + pageSize -1)/pageSize

要約する

上記は、編集者が紹介したMySqlページクエリ機能です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • MySQL を使って Discuz! のホットな投稿のページめくりを最適化するヒント
  • JAVA/JSP 学習シリーズ 8 (MySQL ページめくりの例を書き直す)
  • JAVA/JSP 学習シリーズ 6 (MySQL ページめくりの例)
  • インデックスは MySQL クエリ条件で使用されますか?
  • MySQL で特定の日、月、または年のデータをクエリするためのコードの詳細な説明
  • MySQL ジョイントテーブルクエリの簡単な例
  • MySQLクエリで大文字と小文字を区別しない問題を解決する方法
  • MySQL でデータをクエリし、条件に基づいて別のテーブルに更新する方法の例

<<:  サーバーの購入と初期構築方法

>>:  JavaScript クリップボードの使用法の詳細な説明

推薦する

RedHat 6.5/CentOS 6.5 に MySQL 5.7.20 をインストールするための詳細なチュートリアル

rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...

仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...

CentOS7 カーネル カーネル5.0 バージョンアップグレード

アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...

DockerコンテナでのMySQLデータのインポート/エクスポートの詳細な説明

序文MySQL データのインポートとエクスポートは mysqldump コマンドで解決できることは誰...

W3C 検証に合格するにはどうすればいいですか?

W3C では、さまざまなタグの規定を設定するだけでなく、Web ページの作成者が実際に W3C 規...

MySQL の永続性とロールバックの原理を 1 つの記事で理解する

目次再実行ログディスクデータを直接更新するのではなく、最初にメモリデータを更新する必要があるのはなぜ...

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

MySQL 5.7 および 8.0 データベースのルート パスワードを忘れた場合の解決策

注: MySQL5.7 で root パスワードをクラックするには、パスワード認証をスキップしてデー...

MySQL sql_modeクエリと設定の詳細な説明

1. SQLを実行して表示する @@session.sql_mode を選択します。 グローバルレベ...

jsはテーブルドラッグオプションを実装します

この記事の例では、テーブルドラッグオプションを実装するためのjsの具体的なコードを参考までに共有して...

Vue は Tencent Map を統合して API を実装します (デモ付き)

目次執筆の背景プロジェクトの説明事前準備注記執筆の背景以前のプロジェクトではTencent Maps...

CentOS8 jdk8 / java8 のインストールチュートリアル(推奨)

序文最初はCentOS8でwgetを使ってダウンロードし、解凍して環境変数を設定するつもりだったので...

MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション

1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...

HTML テーブルタグチュートリアル (24): 行の水平方向の配置属性 ALIGN

水平方向では、行の配置を左、中央、右に設定できます。基本的な構文<TR ALIGN="...

Vueはカルーセルアニメーションを実装します

この記事では、カルーセルアニメーションを実現するためのVueの具体的なコードを例として紹介します。具...