没有合适的资源?快使用搜索试试~ 我知道了~
J2EE企业级项目开发-1期 05 hibernate二级缓存实战经验.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 49 浏览量
2022-07-12
23:33:46
上传
评论
收藏 45KB DOC 举报
温馨提示
试读
11页
J2EE企业级项目开发-1期 05 hibernate二级缓存实战经验.doc 学习资料 复习资料 教学资源
资源推荐
资源详情
资源评论
hibernate 二级缓存实战经验
在此纪录 hibernate 二级缓存的一些使用经历,利用几个 test case,从代码角度说明二级缓
存在使用过程中一些需要注意的问题
使用到的 Model 类有两个,Author, Book, 两者之间为一对多的关系
Java 代码
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Author {
private Long id;
private String name;
private Set<Book> books = new HashSet<Book>();
// getter setter methods omitted
}
Java 代码
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Book {
private Long id;
private String title;
private Author author;
// getter setter methods omitted
} 主要的测试类为 TestHibernateSecondLevelCache.java
Java 代码
public class TestHibernateSecondLevelCache {
protected Logger logger = LoggerFactory.getLogger(getClass());
private static SessionFactory sessionFactory;
@BeforeClass
public static void setUpSessionFactory(){
sessionFactory = new
AnnotationConfiguration().configure().buildSessionFactory();
}
@After
public void clearSecondLevelCache(){
logger.info("clear second level cache");
sessionFactory.evict(Author.class);
sessionFactory.evict(Book.class);
sessionFactory.getStatistics().clear();
}
private Session openSession(){
return sessionFactory.openSession();
}
private Statistics getStatistics(){
return sessionFactory.getStatistics();
}
}
方法 setUpSessionFactory 用于创建 Hibernate SessionFactory,因为创建 Session Factory
是个相对比较耗时的操作,因此加上 Junit4 的@BeforeClass annotation,表示该 Session Factory
只会创建一次,被所有的 test case 共享.而 clearSecondLevelCache 方法会在每个 test case 结束
时调用,用于清空二级缓存,防止前一个 test case 的結果影响后一个 test case
测试使用的 hibernate-core 版本为:3.3.2.GA, hibernate-annotations 版本为:3.4.0.GA,测试
的数据库为 hsqldb 内存数据库
一.session.get()
先来看一下 session.get 是否会查找二级缓存
Java 代码
@Test
public void testSessionGetCache(){
Author author = createAuthor();
assertGetMissCache(Author.class, author.getId());
assertGetHitCache(Author.class, author.getId());
updateAuthor(author);
assertGetMissCache(Author.class, author.getId());
}
private Author createAuthor(){
Session session = openSession();
Author author = new Author();
author.setName("septem");
session.save(author);
session.close();
return author;
}
@SuppressWarnings("unchecked")
private void assertGetMissCache(Class clazz, Serializable id){
Statistics stat = getStatistics();
long missCount = stat.getSecondLevelCacheMissCount();
Session session = openSession();
session.get(clazz, id);
session.close();
assertEquals(missCount + 1, stat.getSecondLevelCacheMissCount());
}
@SuppressWarnings("unchecked")
private void assertGetHitCache(Class clazz, Serializable id){
Statistics stat = getStatistics();
long hitCount = stat.getSecondLevelCacheHitCount();
Session session = openSession();
session.get(clazz, id);
session.close();
assertEquals(hitCount + 1, stat.getSecondLevelCacheHitCount());
}
private void updateAuthor(Author author){
author.setName("new_name");
Session session = openSession();
session.update(author);
session.flush();
session.close();
}
testSessionGetCache 首 先 通 过 createAuthor 创 建 一 个 author 对 象 , 然 后 在
assertGetMissCache 里面通过 author.id 使用 get 方法查出之前创建的 author,因为这是每一次
调用 get 方法,所以 hibernate 从数据库取回 author 对象,并将它存入二级缓存.测试結果通过
hibernate statistics 统计信息里的 second level cache miss count 来判断这次的 get 查询未命中
缓存
接着 assertGetHitCache 用同一个 id 通过 get 方法获取 author 对象,因为这个 id 的对象
之前已存入二级缓存,所以这次操作命中缓存
剩余10页未读,继续阅读
资源评论
努力搬砖的小王
- 粉丝: 16
- 资源: 7706
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- YOLOV4-TINY权重文件
- 以下是一个使用贪心算法解决多机调度问题的基本步骤0.txt
- 基于大数据的房产估价是近年来随着技术的发展而兴起的一种新型估价方法.txt
- 企业供应链管理系统v3.rar
- 富芮坤FR8016HA蓝牙开发板使用手册+硬件PCB图+封装库+DEMO演示软件源代码.zip
- 基于YOLOv7的芯片表面缺陷检测系统
- 京东物流 数字化供应链综合研究报告2018.rar
- 基于YOLOv7的植物虫害识别&防治系统
- 2000.1-2023.8中国经济政策不确定性指数月度数据.xlsx
- Screenshot_2024-04-21-20-42-15-443_com.tencent.mm.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功