開いた第2のレベルのキャッシュを使用してMyBatisのベースのアノテーション

  キャッシュと二次キャッシュとのMyBatisの概念は、物品の前述の説明を参照して理解することができます。上記接続します。https://www.cnblogs.com/hopeofthevillage/p/11427438.html、二次キャッシュ上では、XMLの方法を達成するために使用され、この論文は、順番にMyBatisのアノテーションベースの二次キャッシュを使用することを追加することです方法。

  1.二次キャッシュプロファイルMyBatisのを開きます

<?xmlのバージョン= "1.0"エンコード= "UTF-8"?> 
<!設定DOCTYPE 
        PUBLIC " - // mybatis.org//DTDコンフィグ3.0 // EN"を
        「http://mybatis.org/dtd/mybatis config.dtd - 3 "> 
<構成> 
    <設定> 
        < -グローバル遅延ロードを有効にする- >!
        <名=設定" lazyLoadingEnabled "値=" trueに「/> 
        < - &LTを; !!&ndashに;閉じますすぐにロードし、実際には、何も設定は、デフォルトではありません&偽のndash;&GT; - > 
        > - < - <設定名= "aggressiveLazyLoading"値= "偽" />!
        < -オープンSQLは、関連情報の実装がプリントされMyBatisの- ! - > 
        <設定名= "logImpl"値= "STDOUT_LOGGING" />
        <! -メモリを強化するために、デフォルトで有効になって、または手動でこの設定を追加することです- > 
        <設定名= "cacheEnabled"値= "trueに" /> 
    </設定>
    <typeAliases>// localhostを:3306 / TEST1 "/> 
                <プロパティ名="ユーザ名」値= "ルート" />
        <typeAliasは= "com.example.domain.User"エイリアス= "ユーザー" /タイプ> 
        < パッケージ名= "com.example.domain" /> 
    </ typeAliases> 
    <環境のデフォルト = "テスト"> 
        「= <環境IDをテスト"> 
            <! -配置事务- > 
            <トランザクションマネージャーのタイプ=" JDBC "> </トランザクションマネージャー> 
            <! -配置连接池- > 
            <データソースタイプ=" POOLED "> 
                <プロパティ名="ドライバ」値= "はcom.mysql.jdbc.Driver" /> 
                <プロパティ名= "URL"の値= "はjdbc:mysqlの:// localhostを:3306 / TEST1" />
                <プロパティ名= "パスワード"値= "123456" /> 
            </のdataSource> 
        </環境>
    </環境> 
    <マッパー> 
        < パッケージ名= "com.example.dao" /> 
    </マッパー> 
</ configuration>の

  キャッシュを開き、<設定名=「cacheEnabled」値=「真」/>、<設定名=「logImpl」値=「STDOUT_LOGGING」/>は、構成ログを開いて追加し、ログMyBatisのクエリを表示します。

  2.クラスのフィールド、ダオ

パブリック クラスユーザーが実装Serializableを{
     プライベート整数のuserIdを、
    プライベート文字列のuserName;
    プライベート日付userBirthday。
    プライベート文字列userSex。
    プライベート文字列userAddress。
    プライベートリスト<アカウント> アカウント; 
   省略和設定方法......取得   
} 

輸入com.example.domain.Userを。
輸入 org.apache.ibatis.annotations *。;
輸入org.apache.ibatis.mapping.FetchType。

輸入はjava.util.List; 
@CacheNamespace(ブロッキング = パブリック インターフェースUserDao {
     / ** 
     *查找所有用户
     * @return 
     * / 
    @Select( "ユーザSELECT * FROM" 
    @Results(ID = "ユーザマップ"、値= {@Result(ID = trueを、カラム= "ID"プロパティ= "はuserId" )、
            @Result(列 = "ユーザ名"、プロパティ= "userNameに" )、
            @Result(列 = "誕生日"、プロパティ= "userBirthday" )、
            @Result(列 = "性別"、プロパティ= "userSex" )、
            @Result(カラム = "アドレス"、プロパティ= "userAddress」 )、
            @Result(コラム= "ID"、プロパティ= "アカウント"、多く= @Many(= "com.example.dao.AccountDao.findAccountByUid"、fetchType =選択)FetchType.LAZY)
    })
    リスト <ユーザー> のfindAll(); 

    / ** 
     *保存用户
     * @paramのユーザー
      * / 
    @Insert(「ユーザーに挿入(ユーザ名、誕生日、性別、住所)の値(#{ユーザー名}、{#誕生日}、#{性別}、#{アドレス}) " 、ボイドsaveUser(ユーザーユーザー); 

    / ** 
     *更新用户
     * @paramのユーザー
      * / 
    @Update(「更新ユーザのセットのユーザ名=#{ユーザー名}、誕生日=#{誕生日}、性別=#{性別}、ID =#アドレス=#{アドレス} {ID}」無効updateUser(ユーザーのユーザー); 

    / ** 
     *削除ユーザー
     *の@param ID
      * / 
    @Delete( "WHERE ID =ユーザID#{}から削除" ボイド  は、deleteuser(ID整数); 

    / ** 
     *問合せユーザID 
     * @paramのID 
     * @return 
     * / 
    @Select( "SELECT *ユーザIDからID =#{}" 
    @ResultMap(値 = { "Sユーザマップ" })
    ユーザfindById(ID整数); 

    / ** 
     *ユーザクエリのユーザー名
     * @paramの
     * @return 
     * / 
//    @Select( "#{名}のようなユーザー名から選択*") 
    @Select( " '%の$ {値}%'のようなユーザー名から選択*" 
    一覧 <ユーザー> findByUserName(文字列名)。

    / ** 
     *查询用户数量
     * @return 
     * / 
    @Selectを( "利用者からSELECT COUNT(*)" int型findTotalUser(); 
}

  3.開くために、二次キャッシュに対応するダオクラス上記のコメントを追加 

  @CacheNamespace(ブロッキング=真)

  4.テスト

パブリック クラスUserCacheTest { 

    プライベートでのInputStream。
    プライベートSqlSessionFactory sqlSessionFactory。

    @Before 
    公共 ボイドのinit()がスロー例外{  = Resources.getResourceAsStream( "SqlMapConfig.xml" )。
        sqlSessionFactory = 新しいSqlSessionFactoryBuilder()(中)を構築。

    } 
    @After 
    公共 ボイド Destoryは()スロー例外{ 
        in.closeを(); 
    } 
    @Test 
    公共 ボイドtestFindById(){
         //第一查询 
        SQLSESSION sqlSession1 = sqlSessionFactory.openSession()。
        UserDao userDao1 = sqlSession1.getMapper(UserDao。クラス)。
        ユーザーUSER1 = userDao1.findById(41 )。
        System.out.println(USER1)。
        // 关闭一级缓存
        sqlSession1.close();
        // 第二次查询 
        SQLSESSION sqlSession2 = sqlSessionFactory.openSession()。
        UserDao userDao2 = sqlSession2.getMapper(UserDao。クラス)。
        ユーザuser2 = userDao2.findById(41 )。
        System.out.println(USER2)。
        sqlSession1.close();

        System.out.println(USER1 == user2が)。
    } 

}
(1)2つのキャッシュになっていません

(2)二次キャッシュ上


 

おすすめ

転載: www.cnblogs.com/hopeofthevillage/p/11444490.html