ビジネスでは、左結合を使用して結合テーブルをクエリする必要があり、手動で制限ページングクエリを実行する必要がある場合がありますが、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個のデータを見つけて一時テーブルを作成し、目的のテーブルでテーブルをクエリすることです。