一:什么是缓存机制
当我们频繁访问数据库时,尤其像Hibernate持久层框架,会导致数据库访问性能降低,因此我们期望有一种机制能提供一个"缓存空间",我们将需要的数据复制到这个"缓存空间",当数据查询时,我们先在这个"缓存空间"里找,如果没有,我们再去数据库查找,这样就减少了与数据库的访问,从而提高了数据库访问性能,这就是缓存机制。
二:Hibernate缓存机制
1:一级缓存:Hibernate默认的缓存机制,它属于Session级别的缓存机制,也就是说Session关闭,缓存数据消失。
2:二级缓存:属于SessionFactory级别的缓存,二级缓存是全局性的,应用中的所有Session都共享这个二级缓存。
二级缓存默认是关闭的,一旦开启,当我们需要查询数据时,会先在一级缓存查询,没有,去二级缓存,还没有,好,咱们再去数据库,因此缓存机制大大提高了数据库的访问性能。
三:一级缓存用法
当程序调用Session的save()方法持久化对象时,程序并不会立刻将这个数据搞到数据库,而是将它放在了Session的一级缓存中,Session的get()、load()方法也是,当我们调用Session的flush()时,数据才会一并存到数据库。
下面例子演示一级缓存用法:
1:持久化类 News.java
@Entity
@Table(name="new_inf")
public class News {
@Id
@Column(name="new_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
//省略set、get方法
2:数据库表 new_inf
3:主程序 NewManager.java
public class NewManager {
public static void main(String[]args){
NewManager newManager=new NewManager();
newManager.secondCache();
}
public void secondCache(){
//获取Session
Session session=HibernateUtil.currentSession();
//开启事务
Transaction tx=session.beginTransaction();
//获取数据
List list=session.createQuery("from News news")
.list();
//将数据放入session缓存即一级缓存
News news =(News) session.load(News.class, 2);
System.out.println(news.getTitle()+"\t