mybatisには1対多のページングクエリの問題が含まれています

ビジネスでは、左結合を使用して結合テーブルをクエリする必要があり、手動で制限ページングクエリを実行する必要がある場合がありますが、mybatisは、最初にページングクエリを実行してから、データ構造をマッピングします。たとえば、10個のレコードをに分割する必要がある場合1ページで、データベースは10レコードを検出します。その結果、mybaitsマッピング結果の後にフロントエンドに返されるレコードが10個ない場合があり、フロントエンドページが異常に表示されます。これは、mybatisを使用すると、左側のテーブルの同じレコードを同じオブジェクトにマップし、右側のテーブルの複数のレコードをコレクションにマップできるためです。では、左側のテーブルに10個の異なるレコードがあることを確認するにはどうすればよいでしょうか。

方法1(コレクション選択)

最初の方法ではサブクエリマッピングを使用できますが、複数のsqlステートメントが生成されるため、
次の図に示すようにパフォーマンスが低下するという欠点があります。インターネットで画像を見つけた場合は、次の方法でBaidumybatisコレクションを選択できます。主にコレクションタグQueryで副選択を指定し、列のフィールドを副クエリに渡してクエリ条件として使用します。簡単に言えば、テーブルを結合する代わりに、それぞれの結果を確認してから、結果をまとめます。 。希望する結果が得られますが、結果は次のようになります。メインクエリレコードが見つかるたびに、対応するマルチパーティデータをクエリするためのサブクエリSQLステートメントが生成されます。パフォーマンスに大きな影響を与えることが想像できます。推奨されていません。
ここに画像の説明を挿入します

方法2(ネストされたクエリ)

別の方法は、次のように、ネストされたクエリをSQLで直接使用することです。

select A.xxx, B.xxx from 
( select A.xxx, A.xxx, A.xxx from a_table A limit 0,10 ) as A 	 -- 先分好页得到结果再联表
left join b_table B on A.xx = B.xx 
left join ......

簡単に言うと、メインテーブルの10個のデータを見つけて一時テーブルを作成し、目的のテーブルでテーブルをクエリすることです。

他の方法や何か問題がある場合は、私を訂正し、学び、一緒に進歩してください!

おすすめ

転載: blog.csdn.net/weixin_45879810/article/details/110952655