课程咨询 :0871-63112636      qq:2066486918

昆明Java培训 > 达内新闻 > 什么是一级缓存?
  • 什么是一级缓存?

    发布:昆明Java培训      来源:达内新闻      时间:2017-01-11

  • 昆明达内Java培训的老师这一期给大家讲什么是一级缓存。

    又称为:hibernate一级缓存、session缓存、session一级缓存

    缓存的概念:在内存上存储一些数据

    缓存的介质是一般是内存(硬盘),用来存放数据,当第一次查询数据库的时候,将数据放入缓存,当第二次继续使用这些数据的时候,就不需要要查询数据库了,直接从缓存获取,

    一级缓存概念:

    在Session接口中实现了一系列的java集合,这些java集合构成了Session的缓存,只要Session的生命周期没有结束,session中的数据也就不会被清空。

    缓存作用:

    将数据缓存到内存或者硬盘上,访问这些数据,直接从内存或硬盘加载数据,无需到数据库查询。

    好处:快!降低数据库压力。

    一级缓存的生命周期:

    Session中对象集合(map),在Session创建时,对象集合(map)也就创建,缓存保存了Session对象数据,当Session销毁后,集合(map)销毁,一级缓存释放!

    什么对象会被放入一级缓存?

    只要是持久态对象,都会保存在一级缓存(与session关联的本质,就是将对象放入了一级缓存)

    一级缓存的作用:第一次get/load的时候,肯定会发出sql语句,查询数据库,(此时会将数据放入一级缓存),只要session不关闭,

    第二次get/load的时候,直接从缓存中读取数据,不会发出sql语句,查询数据库(这里的数据指的是同一条记录:OID相等)

    【示例】证明一级缓存的存在性!

    通过多次查询同一个po对象数据,得到同一个对象,且第二次不再从数据库查询,证明一级缓存存在。

    @Test

    public void testFirstCacheExist(){

    /**

    *证明一级缓存的存在性

    *证明思路:

    *缓存的作用就是用来少查数据库的,提高访问速度

    *第一步,通过get/load查询数据,由于是第一次查询,所以必然发出sql语句,查询数据库

    *第二步,不关闭session,继续使用当前的session去get/load数据,观察是否发出sql语句

    *如果不发出,表明是从一级缓存取出的数据

    */

    Session session = HibernateUtils.openSession();

    session.beginTransaction();

    //第一步:此时必然发出sql语句,然后自动将数据放入一级缓存

    Customer customer = (Customer) session.get(Customer.class, 1);

    System.out.println(customer);

    //第二步:此时不会发出sql语句,直接从一级缓存获取数据

    Customer customer2 = (Customer) session.get(Customer.class, 1);

    System.out.println(customer2);

    session.getTransaction().commit();

    session.close();

    }

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:Hibernate持久化对象的状态

下一篇:一级缓存的生命周期

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:01/20

Java--零基础业余班

Java--零基础业余班

开班日期:01/20

Java--周末提升班

Java--周末提升班

开班日期:01/20

Java--零基础周末班

Java--零基础周末班

开班日期:01/20

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:0871-63112636      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56