実際の開発では、Mybatis の 1 対多および多対多の関連クエリでは、resultMap 参照、javaType 参照、または select 参照を使用しますが、どちらのパフォーマンスが優れていますか?
select を使用した遅延読み込みにより、クエリの速度とパフォーマンスが向上しますか?
漂亮男人2017-05-27 17:43:50
mybatis には、1 対多の状況を処理するための 3 つのソリューションがあります:
クエリを実行するときにサブテーブルに参加し、mybatis に組み立てさせます
クエリを実行するときにサブテーブルを結合せず、選択を開始してサブテーブルのデータをキャプチャします
クロールのタイミングを遅らせるために fetchType=lazy
を使用する点を除き、2 つ目と同様です
これら 3 つのオプションにはそれぞれ独自の問題があります:
最初の解決策には 2 つの欠陥があります: 1) ページング クエリを実行するときは不正確です、2) 関連するサブテーブルが多数ある場合、デカルト積は非常に大きくなります
2 番目のオプションには 1+N のクエリがあり、開始される SQL の数は非常に恐ろしいものになります
3番目の解決策は最初のクエリの効率を向上させているように見えますが、ループ内でlazyプロパティを取得する場合、2番目の解決策と違いはありません
したがって、パフォーマンス要件がある場合は、1 対多のコレクションを自分で組み立てる必要があります。その方法は、メイン テーブルの ID を収集し、1 回限りのクエリを開始してすべてのサブテーブルのデータを取得することです。次に手動で組み立てます。この方法で開始されるクエリの数は 1+1 です。