本篇文章主要介绍了"框架 day32 Hibernate,一级缓存,关联关系映射一对多,多对多",主要涉及到Hibernate方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
一级缓存概念*在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存. 只要 Session 实例没有结束生...
一级缓存
概念
*在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存.
只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期
*当session的save()方法持久化一个对象时,该对象被载入缓存,
以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中。
当试图get()、 load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库。没有再查询数据库
*Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句,
来同步更新数据库, 这一过程被称为刷出缓存(flush)
*一级缓存为session级别的缓存,既将数据保存session中。*一级缓存功能为hibernate内置,不能设置取消,必须使用的。*一级缓存为提高性能
* session提供 map容器,用于执行一些指定的操作时,进行相应PO对象缓存的。
默认情况下 Session 在以下时间点刷出缓存:
1.当应用程序调用 Transaction 的 commit()方法的时, 该方法先刷出缓存(session.flush()),然后在向数据库提交事务(.commit())
2.当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态
3.调用Session的flush() 方法
一级缓存常见操作
1. flush它就是用于刷新一级缓存的。
2. clear 清空一级缓存中所有对象
3. evict 清空一级缓存中指定对象
4. refresh 它是使用数据库的数据同步一级缓存与快照 (重新查询数据库,更新快照和一级缓存)
证明一级缓存存在
@Test
public void demo01(){
//证明:一级缓存
Session session = H3Utils.getCurrentSession();
session.beginTransaction();
// 1 执行select ,将结果缓存到一级缓存
Category category = (Category) session.get(Category.class, "142729-19960808-1231");
System.out.println(category);
//2 如果一级缓存有数据,将直接获取
Category category2 = (Category) session.get(Category.class, "142729-19960808-1231");
System.out.println(category2);
session.getTransaction().commit();
}
一级缓存的FlushMode
(设置缓存的flush模式)
session.setFlushMode(FlushMode.AUTO);