北京传智播客教育件人才实作培训专家!Hibernate一级缓存北京传智播客教育件人才实作培训专家!Hibernate缓存?缓存是存储数据的临时空间,减少从数据库中查询数据的次数?Hibernate中提供有两种缓存机制?一级缓存(Hibernate自身携带)?二级缓存(使用外部技术)北京传智播客教育件人才实作培训专家!Hibernate一级缓存(重点)?Hibernate的一级缓存即Hibernate操作数据时所对应的临时数据存储区域,这个区域是绑定Session对象的,也就是说每开启一个Session对象,就会产生对应的一级缓存空间,当Session对象关闭时,该空间内的数据,也就是其中保存的PO对象,会转化为DO对象。?Hibernate的一级缓存是Session级别的缓存,与Session对象一一对应,不同的Session间无法共享缓存数据。北京传智播客教育件人才实作培训专家!Hibernate一级缓存操作?验证Hibernate一级缓存的存在性?get与load方法的区别?相同:load与get方法查询数据,首先查找一级缓存中是否存在待查找数据,如果存在,直接获取;如果不存在,从数据库中通过SQL语句获取数据库端对应的数据?不同:load方法查询到的对象,如果只获取数据的OID则不进行任何查询,直接返回OID;如果需要使用OID之外的数据,则按照上述规则查找对应的数据?通过配置可以关闭延迟加载——lazy属性北京传智播客教育件人才实作培训专家!Hibernate延迟加载开启与关闭?,可以配置是否使用延迟加载特性,可以将该属性配置在如下位置?整体包中?某个映射模型北京传智播客教育件人才实作培训专家!load与get的区别(重点)?load与get方法都可以根据OID获取单条数据?获取对象时加载形式?load:延迟加载数据?get:直接通过SQL语句加载?加载对象格式?load:代理对象(lazy=“true”,模型不能被final修饰)?get:普通对象?加载失败?load:抛出异常?get:返回null北京传智播客教育件人才实作培训专家!Hibernate使用一级缓存?Hibernate的一级缓存可以理解为数据的中转站?Hibernate使用OID进行数据读取操作?如果一级缓存中存在该数据,直接取出使用?如果一级缓存中不存在,执行SQL语句从数据库中获取,并加载入一级缓存?Hibernate进行数据增删改操作?将待操作的数据及操作模式放入一级缓存?Hibernate使用SQL语句读取数据?不检测一级缓存是否存在数据,直接执行SQL语句从数据库中获取,并加载入一级缓存北京传智播客教育件人才实作培训专家!Hibernate刷新一级缓存——增删改?Hibernate一级缓存保存单次Session增删改操作对应的数据,当Hibernate执行下列操作时,执行对应SQL语句将一级缓存数据更新到数据库。如果最终未正常提交事务,SQL语句仍然生成,但是没有真正提交到数据库。?执行事务提交?mit();?刷新Session范围的缓存数据?();?关闭Session(必须配置自动提交事务)(不常用)?();北京传智播客教育件人才实作培训专家!Hibernate刷新一级缓存——查询快照?当任意数据从数据库加载到Hibernate一级缓存中时,马上保存该数据的一份克隆(快照),当一级缓存刷新时,对每一个缓存中的对象进行比对,如果快照数据与当前数据相同,无任何操作;如果快照数据与当前数据不同,则将修改后的数据更新到数据库中,执行对应的SQL语句,并更新快照数据?一级缓冲中保存的对象全是PO,因此PO可以更新数据库对应信息,而TO与DO则不具备这样的能力北京传智播客教育件人才实作培训专家!Hibernate操作一级缓存?刷新一级缓存?();?清除一级缓存?();?清除一级缓存中指定对象?(obj);?按照OID重新加载一级缓存中的PO(使用数据库中数据覆盖一级缓存数据及快照数据)?(obj);
hibernate一级缓存 来自淘豆网m.daumloan.com转载请标明出处.