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インタフェースを実現するためにシーケンス化可能である必要がある.



    
    

    

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;
    }
}