A、JSR107
Javaのキャッシュは5つのコアインタフェースがCachingProvider、のCacheManager、キャッシュエントリの有効期限とされている定義します。
1、CachingProviderの定義は、複数のCacheManagerを管理及び制御、設定、取得を作成します。
アプリケーションは、実行時に複数のCachingProviderにアクセスすることができます。
2、のCacheManagerの定義の作成、設定、取得、管理、一意キャッシュ名前制御倍、
キャッシュのCacheManagerのコンテキストに存在しています。AのCacheManagerは唯一CachingProviderが所有していました。
図3は、キャッシュ地図データ構造と同様と一時インデックスキーの値として記憶されます。キャッシュが所有する唯一のCacheManagerです。
図4は、エントリがキャッシュに格納されたキーと値のペアです。
図5は、キャッシュエントリのそれぞれに格納された有効期限が定義された期間を有します。この時間の経過したら、期限切れの状態のエントリ。
期限切れの後は、エントリは、アクセス、更新、および削除されません。キャッシュの有効期間はExpiryPolicyによって設定することができます。
あまりにも多くの問題を使用してください
二、春のキャッシュ抽象化
春バージョン3.1定義org.springframework.cache.Cache
そしてorg.springframework.cache.CacheManagerは異なるキャッシュ技術を統一するインターフェース。
そして、サポートJCacheの(JSR-107)の注釈は、私たちの開発を簡素化します。
キャッシュインターフェース仕様は、アセンブリキャッシュ、各種操作のセットを含むキャッシュとして定義されます。
春にキャッシュインターフェースは、様々なxxxCacheの実装を提供します。
RedisCache、EhCacheCache、ConcurrentMapCacheなど等。
たびメソッドは、キャッシュ機能は、春には指定されたパラメータが呼び出されたかどうかをチェックするためにチェックする指定されたターゲットメソッドを呼び出しますが必要です。
キャッシュから直接メソッド呼び出しの結果を取得することがある場合は、メソッドを呼び出し、その結果をキャッシュしない場合、ユーザーに返されます。
次の呼び出しは、キャッシュから直接入手可能です。
我々は二つのことに集中する必要があると春のキャッシュ抽象化を使用している場合。
彼らのキャッシュポリシーと同様にキャッシュする方法の必要性を決定する1、
2、キャッシュメモリキャッシュからデータを読み込む前に、
第三に、基本的なビルド環境:
説明するためにコードの練習:
1、新規建設:
図2に示すように、データベーステーブルと対応するJavaBeansを作成します
部門テーブル構造
従業員のテーブル構造
パブリック クラス部門{ プライベート整数ID。 プライベート文字列departmentName。 公共部門(){ }
....
}
パブリック クラス従業員{ プライベート整数ID。 プライベート文字列lastNameの。 プライベート文字列のメール。 プライベート整数性別; プライベート整数でした。 公共の従業員(){ } ... }
3、データベース統合MyBatisの動作
application.xmlの基本的なコンフィギュレーション・データ・ソース情報
spring.datasource.url = JDBCます。mysql:// localhostを:?3306 / springboot_cache serverTimezone = UTC
spring.datasource.username =ルート
spring.datasource.password = 123
spring.datasource.driver-クラス名= com.mysql.cj .jdbc.Driver
#驼峰命名开启
mybatis.configuration.map・アンダースコア・ツー・キャメルケース=真
エンティティクラスにマッパーインタフェースの対応を追加します。
テストを書くというEmployeeMapper
// @マッパー//在springbooot启动类中配置了@MapperScan、所以这里就不用再配置@Mapper了
パブリックインターフェースEmployeeMapper {
@Select( "従業員ID =#{ID} SELECT * FROM")
公務員getEmpById(整数ID)。
@Update( "更新従業員セットLAST_NAME =#{lastNameの}、メール=#{メール}、性別=#{性別}、D_ID =#{DID} ID =#{ID}")
公共ボイドupdateEmp(従業員) ;
@Delete( "削除従業員ここID =#{ID}")
公共ボイドdeleteEmpById(整数ID)。
@Insert( "従業員への挿入(姓、電子メール、性別、D_ID)の値(#{lastNameの}、#{メール}、#{性別}、{#} D_ID)")
公共ボイドinsertEmp(従業員)。
}
springboootでは、マッパーインターフェースは@Mapperを設定する必要はありませんどのパッケージ指定走査@MapperScan下マッパークラスコンフィギュレーションを開始します
@MapperScan( "com.atguigu.cache.mapper" ) @SpringBootApplication パブリック クラスSpringboot01CacheApplication { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(Springboot01CacheApplication。クラス、引数)。 } }
手動でレコードを挿入
テストクラスでのクエリテスト動作
@SpringBootTest クラスSpringboot01CacheApplicationTests { @Autowired EmployeeMapper employeeMapper。 @Test ボイドcontextLoads(){ 従業員EMP = employeeMapper.getEmpById(1 )。 System.out.println(EMP)。 } }
コンソール出力:
説明成功した統合MyBatisの
4、サービス層と制御層のテストを作成します
@RestController パブリック クラスEmployeeController { @Autowired EmployeeService employeeService。@RequestMapping( "/ EMP / {ID}" ) パブリック従業GETEMPLOYEE(@PathVariable( "ID" )、整数ID){ 従業員EMP = employeeService.getEmp(ID)。 リターンEMP; } }
@Service パブリック クラスEmployeeService { @Autowired ; EmployeeMapper employeeMapper 公共の従業員getEmp(整数ID){ するSystem.out.println( "查询" + ID + "号员工" )。 従業員の従業員 = employeeMapper.getEmpById(ID)。 リターン従業員; } }
ブラウザでの今回の訪問では:
成功した訪問、成功を構築するための基本的な環境。