キャッシュと二次キャッシュとの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)二次キャッシュ上