Mybatis遅延ロードおよび2次キャッシュのチュートリアル
3355 ワード
ディレイロード
遅延ロード処理はN+1パフォーマンスの問題であり、N+1パフォーマンスの問題とは、マッピングセット(resultMap)メモリがカスケードされている場合に必要なデータがデータベースで検出されたデータより少ないことを意味します.これにより、データベースから多く検出されたデータが無駄に浪費され、データベース側の負担が増大するのは、私たちが最も望んでいないことです.Mybatisはこのために遅延ロードを導入した.遅延ロードのプロセスは、最初はすべてのカスケードデータを取り出さず、カスケードデータを使用する場合にのみMybatisがSQLを送信してデータを取り戻すことです.
Mybatisはデフォルトでは階層ごとに遅延ロードされるため、カスケードのある階層のデータを使用すると、その階層のすべてのデータがクエリーされます.このときaggressiveLazyLoadingの構成を使用します.
上記の構成に従って、データを完全にオンデマンドでロードできます.しかし、もしそうすれば、すべてのカスケードは複数のSQL文を送信してクエリーを行う必要があるため、速度が遅くなり、ある2つまたはいくつかのカスケードを1つのSQL文に配置してクエリーを行うことがよくあります.このような状況も最も一般的で、ローカル遅延ロードを使用して上記の問題を解決することができます.
二次キャッシュ
Mybatisではデフォルトで1つのキャッシュがサポートされています.つまり、同じSqlSessionに対して同じクエリが実行されず、キャッシュから直接結果が取り出されます.2次キャッシュを開くには、2次キャッシュを開く必要があるmapperファイルに追加するだけです.また、関連付けられたPOJOは、Serializableインタフェースを実現するためにシーケンス化可能である必要がある.
遅延ロード処理はN+1パフォーマンスの問題であり、N+1パフォーマンスの問題とは、マッピングセット(resultMap)メモリがカスケードされている場合に必要なデータがデータベースで検出されたデータより少ないことを意味します.これにより、データベースから多く検出されたデータが無駄に浪費され、データベース側の負担が増大するのは、私たちが最も望んでいないことです.Mybatisはこのために遅延ロードを導入した.遅延ロードのプロセスは、最初はすべてのカスケードデータを取り出さず、カスケードデータを使用する場合にのみMybatisがSQLを送信してデータを取り戻すことです.
//
...
...
Mybatisはデフォルトでは階層ごとに遅延ロードされるため、カスケードのある階層のデータを使用すると、その階層のすべてのデータがクエリーされます.このときaggressiveLazyLoadingの構成を使用します.
上記の構成に従って、データを完全にオンデマンドでロードできます.しかし、もしそうすれば、すべてのカスケードは複数のSQL文を送信してクエリーを行う必要があるため、速度が遅くなり、ある2つまたはいくつかのカスケードを1つのSQL文に配置してクエリーを行うことがよくあります.このような状況も最も一般的で、ローカル遅延ロードを使用して上記の問題を解決することができます.
二次キャッシュ
Mybatisではデフォルトで1つのキャッシュがサポートされています.つまり、同じSqlSessionに対して同じクエリが実行されず、キャッシュから直接結果が取り出されます.2次キャッシュを開くには、2次キャッシュを開く必要があるmapperファイルに追加するだけです.また、関連付けられたPOJOは、Serializableインタフェースを実現するためにシーケンス化可能である必要がある.
public class Account implements Serializable {
private Integer id;
private static final long serialVersionUID = 1L;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}