`

一级缓存

阅读更多
hibernate一级缓存

一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存

那些方法支持一级缓存:
* get()
* load()
* iterate(查询实体对象)

Iterator查询普通属性,一级缓存不会缓存,所以会发出SQL,一级缓存是缓存实体对象的

如何管理一级缓存:
* session.clear(),session.evict()

如何避免一次性大量的实体数据入库导致内存溢出
* 先flush,再clear

如果数据量特别大,考虑采用jdbc实现,如果jdbc也不能满足要求可以考虑采用数据本身的特定导入工具

  1. ======================================================
  2. 在同一个session中发出两次load查询
  3. Studentstudent=(Student)session.load(Student.class,1);
  4. System.out.println("student.name="+student.getName());
  5. //不会发出sql,因为load使用缓存
  6. student=(Student)session.load(Student.class,1);
  7. System.out.println("student.name="+student.getName());
  8. ============================================================
  9. 在同一个session中发出两次get查询
  10. Studentstudent=(Student)session.get(Student.class,1);
  11. System.out.println("student.name="+student.getName());
  12. //不会发出sql,因为get使用缓存
  13. student=(Student)session.get(Student.class,1);
  14. System.out.println("student.name="+student.getName());
  15. ===============================================================
  16. 在同一个session中发出两次iterate查询实体对象
  17. Studentstudent=(Student)session.createQuery("fromStudentswheres.id=1").iterate().next();
  18. System.out.println("student.name="+student.getName());
  19. //会发出查询id的sql,不会发出查询实体对象的sql,因为iterate使用缓存
  20. student=(Student)session.createQuery("fromStudentswheres.id=1").iterate().next();
  21. System.out.println("student.name="+student.getName());
  22. =================================================================
  23. 在同一个session中发出两次iterate查询实体对象
  24. Stringname=(String)session.createQuery("selects.namefromStudentswheres.id=1").iterate().next();
  25. System.out.println("student.name="+name);
  26. //iterate查询普通属性,一级缓存不会缓存,所以发出sql
  27. //一级缓存是缓存实体对象的
  28. name=(String)session.createQuery("selects.namefromStudentswheres.id=1").iterate().next();
  29. System.out.println("student.name="+name);
  30. ===================================================================
  31. 开启两个session中发出load查询
  32. try{
  33. session=HibernateUtils.getSession();
  34. session.beginTransaction();
  35. Studentstudent=(Student)session.load(Student.class,1);
  36. System.out.println("student.name="+student.getName());
  37. session.getTransaction().commit();
  38. }catch(Exceptione){
  39. e.printStackTrace();
  40. session.getTransaction().rollback();
  41. }finally{
  42. HibernateUtils.closeSession(session);
  43. }
  44. try{
  45. session=HibernateUtils.getSession();
  46. session.beginTransaction();
  47. //会发出查询语句,session间不能共享一级缓存的数据
  48. //因为它会伴随session的生命周期存在和消亡
  49. Studentstudent=(Student)session.load(Student.class,1);
  50. System.out.println("student.name="+student.getName());
  51. session.getTransaction().commit();
  52. ==================================================================
  53. 在同一个session中先save,在发出load查询save过的数据
  54. Studentstu=newStudent();
  55. stu.setName("王五");
  56. Serializableid=session.save(stu);//save有一个返回值,即是它的ID
  57. //不会发出sql,因为save是使用缓存的
  58. Studentstudent=(Student)session.load(Student.class,id);
  59. System.out.println("student.name="+student.getName());
  60. ============================================================
  61. 向数据库中批量加入1000条数据
  62. for(inti=0;i<1000;i++){
  63. Studentstudent=newStudent();
  64. student.setName("s_"+i);
  65. session.save(student);
  66. //每20条数据就强制session将数据持久化
  67. //同时清除缓存,避免大量数据造成内存溢出
  68. if(i%20==0){
  69. session.flush();
  70. session.clear();
  71. }
  72. }

分享到:
评论

相关推荐

    深入理解MyBatis中的一级缓存与二级缓存

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    Hibernat一级缓存(源码)

    在 Hibernate 中,一级缓存是默认开启的一种缓存机制,对于提高应用程序性能有着重要作用。一级缓存位于 Session 对象中,是每个 Session 的私有缓存,它存储了从数据库中读取的对象实例。 一级缓存的工作原理: 1....

    hibernate一级缓存和二级缓存的区别与联系

    缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存是 Hibernate 内置的,默认开启,与 Session 对象关联。它是一个事务范围的缓存,也就是说,每个...

    mybatis一级缓存和二级缓存简单示例

    一级缓存默认是开启的,但需要注意的是,当 SqlSession 提交事务或者关闭时,一级缓存会被清空。 ### 二级缓存 二级缓存是 Mapper 级别的缓存,可以跨 SqlSession 工作。它将数据存储在一个全局区域,多个 ...

    hibernate一级缓存、二级缓存和查询缓存

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    hibernate的一级缓存和二级缓存

    《深入理解Hibernate的一级缓存与二级缓存》 Hibernate作为一款强大的ORM框架,其缓存机制是优化数据库操作性能的关键之一。缓存主要分为一级缓存和二级缓存,它们各自承担着不同的职责,共同提升了数据访问的效率...

    Hibernate一级缓存和二级缓存

    标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...

    hibernate一级缓存

    **hibernate一级缓存详解** 在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它为提高数据库操作效率、减少对数据库的访问提供了重要支持。一级缓存,也称为session缓存,是每个Hibernate Session内部...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象被加载到内存中时,它们会被存储在一级缓存中。一级缓存是事务级的,意味着它只存在于当前事务内,一旦事务提交或回滚,一级...

    Hibernate性能优化:一级缓存

    本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...

    Hibernate 一级缓存和二级缓存的区别

    Hibernate 一级缓存和二级缓存的区别

    MyBatis缓存(一级缓存、二级缓存)

    缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...

    一级缓存和二级缓存

    一级缓存(L1 Cache)和二级缓存(L2 Cache)是CPU内部的重要组成部分,它们位于主内存和CPU核心之间,扮演着数据快速访问的角色。本文将深入探讨这两个级别的缓存系统,以及它们在优化计算性能中的作用。 首先,一...

    Redis用作二级缓存

    在Mybatis中,一级缓存默认存在于SqlSession级别,当一个SqlSession打开时,它会为执行的每个查询存储结果,如果同一个SqlSession中再次执行相同的查询,Mybatis会首先从一级缓存中查找数据。然而,一级缓存的范围...

    一级缓存、二级缓存、三级缓存区别终稿.pdf

    缓存是计算机处理器性能优化的关键组成部分,主要分为一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)。这些缓存层级的存在是为了减少CPU访问主内存的时间,提高计算效率。 一级缓存是离CPU最近...

    Hibernate一级缓存和二级缓存【内附二级缓存数据存储结构】

    首先,一级缓存是Hibernate默认提供的缓存,每个Session都有一个独立的一级缓存。当我们在操作数据库时,例如查询或更新记录,这些操作实际上是在与一级缓存交互。一级缓存的作用在于减少对数据库的直接访问,提高...

    Hibernate缓存策略(一级缓存、二级缓存).docx

    然而,一级缓存的生命周期与Session绑定,当Session关闭后,一级缓存中的数据也会被丢弃。如果在关闭Session后重新打开并尝试加载相同对象,Hibernate将不再能从一级缓存中获取,而是重新执行SQL查询,这就是第二个...

    Hibernatehibernate一级缓存.pdf

    在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它是Session级别的缓存,也称为事务级缓存。一级缓存的作用是提高数据访问效率,减少对数据库的直接访问,从而提升应用程序的性能。当我们在Hibernate中...

    模拟hibernate中一级缓存

    Hibernate的一级缓存机制是其性能优化的关键特性之一。本文将深入探讨一级缓存的概念、工作原理,并通过一个简单的案例来模拟其在实际应用中的行为。 首先,我们需要理解什么是Hibernate的一级缓存。一级缓存,也...

Global site tag (gtag.js) - Google Analytics