zoukankan      html  css  js  c++  java
  • 证明hibernate一级缓存的存在

    hibernate中,所谓的一级缓存是指,当用session的api如save、get操作数据时,session首先并不会直接操作数据库,而会操作为seesion分配的缓存区间,比方说,session.get(Customer.class,1);会先从缓存中查找有没有id为1的custmer对象,如果有就直接使用,如果没有才会访问数据库,并且将从数据库中拿到的对象放入一级缓存中,以备下次使用。这样就减少了对数据库的访问次数,提高了性能。

    public class HibernateDemo1 {
    	public static void main(String[] args) {
    	
    		Configuration cfg = new Configuration().configure();
    		SessionFactory sf = cfg.buildSessionFactory();
    		Session session = sf.openSession();
    		Transaction tx = session.beginTransaction();
    		tx.begin();
    		Customer customer = session.get(Customer.class, 1);
    		//session.clear();
    		Customer customer2 = session.get(Customer.class, 1);
    		tx.commit();
    		session.close();
    		System.out.println(customer);
    		System.out.println(customer2);
    	}
    }
    

     上述代码,虽然两次使用了session.get方法,但是观察控制台发现sql只执行了一次,这就证明了session缓存的存在。

    当打开注释掉的session.clear()代码时,sql又会执行两次了。因为session.clear()的作用就是清空seesion的缓存。

    此外,session.close()后,session的缓存也会随之被清理了。

    除了缓存能提高效率外,hibernate还有一个提高效率的机制,那就是快照,快照能减少不必要的update语句。

    快照的原理是,当数据写入session缓存的同时,也写一份给快照,我们修改数据是修改的缓存的那一份,当最后需要提交到数据库时,先检查要提交的数据和快照的那一份是否相同,如果相同,就说明不需要对数据库进行update,所以就不执行update语句。

  • 相关阅读:
    Salesforce API的概念
    Salesforce Iot / salesforce 物联网
    Salesforce Ant 元数据迁移工具(学习笔记)
    Lightning Component 控制样式显示隐藏的两种方式;
    Lightning Component 嵌入到 VF Page
    salesforce 页面开发
    Lightning Component 开发笔记以及注意事项
    salesforce 打印文档(内部类,子查询)
    小程序知识点
    js创建对象的几种方式
  • 原文地址:https://www.cnblogs.com/lixin4395/p/10240409.html
Copyright © 2011-2022 走看看