`
tanpingpingiloveyou
  • 浏览: 4660 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Hibernate工作机制和流程

阅读更多
原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"></mapping>读取并解析映射信息 3.通过config.buildSessionFactory();//创建SessionFactory 4.sessionFactory.openSession();//打开Sesssion 5.session.beginTransaction();//创建事务Transation 6.persistent operate持久化操作 7.session.getTransaction().commit();//提交事务 8.关闭Session 9.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存机制 1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现 ////////一级缓存:session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致。不能对其进行管理。 不用显示的调用。 二级缓存:sessionFactory缓存,也叫进程级的缓存,使用第3方插件实现的,也值缓存实体,生命周期和sessionFactory一致,可以进行管理。 首先配置第3放插件,我们用的是EHCache,在hibernate.cfg.xml文件中加入 <property name="hibernate.cache.user_second_level_cache">true</property> 在映射中也要显示的调用,<cache usage="read-only"></cache> 二级缓存之查询缓存:对普通属性进行缓存。如果关联的表发生了修改,那么查询缓存的生命周期也结束了。 在程序中必须手动启用查询缓存:query.setCacheable(true);///////// 5. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数 6. 如何优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 1.Hibernate有哪几种查询数据的方式 (1)导航对象图查询 (2)OID查询 (3)HQL (4)QBC (5)本地SQL 2.load()和get()的区别 load加载方法: Java代码 Users user = (Users)session.load(Users.class, userId); Users user = (Users)session.load(Users.class, userId); get加载方法: Java代码 Users user = (Users)session.get(Users.class, userId); Users user = (Users)session.get(Users.class, userId); 两加载方法区别: 区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException; 区别2:load支持延迟加载,get不支持延迟加载。 也就是说: Java代码 Users user = (Users)session.load(Users.class, userId); Users user = (Users)session.load(Users.class, userId); 这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。 而: Java代码 Users user = (Users)session.get(Users.class, userId); Users user = (Users)session.get(Users.class, userId); 则立即去执行数据库查询。 所以Users user = (Users)session.load(Users.class, userId);不会执行任何sql。 注意: Java代码 Users user = (Users)session.load(Users.class, userId); System.out.println(user.getId()); Users user = (Users)session.load(Users.class, userId); System.out.println(user.getId()); 上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。
分享到:
评论

相关推荐

    Struts+Hibernate+Spring的基本流程

    第二,Hibernate作为ORM框架,提供了一种将Java对象与数据库表之间的映射机制。它的核心特性包括实体类、配置文件、HQL(Hibernate查询语言)等。Hibernate简化了数据库操作,允许开发者以面向对象的方式处理数据,...

    项目中Struts+Spring+Hibernate的基本流程

    Struts是MVC(Model-View-Controller)设计模式的一个实现,主要用于处理用户的请求和控制应用程序的流程。它负责接收HTTP请求,通过Action类将请求分发到相应的业务逻辑,并将结果传递给视图进行展示。在Struts中,...

    基于Struts+Hibernate+Spring的工作流系统

    Struts处理用户交互,Hibernate负责数据持久化,Spring进行组件管理和流程协调,三者协同工作,为复杂的企业工作流提供了一个灵活、可扩展的解决方案。通过这样的架构,开发者可以专注于业务逻辑,而非底层技术细节...

    Hibernate 工作原理图Hibernate 工作原理图

    本文将深入探讨 Hibernate 的工作原理,帮助读者更好地理解其内部机制。 #### 二、Hibernate 架构解析 ##### 2.1 核心组件 Hibernate 的核心组件包括 Session、SessionFactory、Configuration 等,这些组件在 ...

    struts工作原理图、spring框架结构图、hibernate工作原理图

    Struts、Spring 和 Hibernate 是Java开发中非常重要...在实际项目中,Struts负责控制流程,Spring提供全面的依赖管理和数据访问,而Hibernate则简化了数据库操作,三者结合可以构建出高效、可维护的Java Web应用程序。

    struts2+spring+hibernate简单的工作流系统

    4. **工作流系统**:工作流系统是指对工作流程进行管理和控制的软件系统。在本项目中,可能包括了任务分配、审批流程、状态追踪等功能。使用SSH框架可以实现灵活、可定制的工作流程,例如定义不同角色的任务权限,...

    Hibernate执行持久层访问步骤

    本文将深入探讨Hibernate执行持久层访问的详细步骤,帮助开发者更好地理解和应用Hibernate。 一、配置环境 1. 添加Hibernate依赖:在项目中引入Hibernate的JAR包或者Maven/Gradle依赖。 2. 配置Hibernate:创建...

    spring和hibernate源文件

    3. **Criteria 和 HQL 查询**:除了 SQL,Hibernate 还提供了 Criteria API 和 HQL(Hibernate 查询语言)来查询数据,源码可以解释这些高级查询机制的工作原理。 4. **二级缓存**:Hibernate 支持缓存策略,通过...

    Hibernate工作原理及为什么要用

    Hibernate是一个强大的Java持久化框架,...以上是关于Hibernate的工作原理、使用原因、优化方法,以及Struts的工作机制和使用目的的详细阐述。这些知识对于理解Java企业级开发中的数据访问和Web应用架构具有重要意义。

    hibernate的工作原理

    在 Hibernate 的工作流程中,首先需要配置两个重要的文件:`hibernate.cfg.xml` 和 `.hbm.xml`。`hibernate.cfg.xml` 文件包含了 Hibernate 与数据库的连接信息,如数据库 URL、用户名、密码、驱动类以及 dialect...

    Beginning Hibernate: For Hibernate 5

    - **简化开发**: Hibernate 大大减少了开发者处理复杂 SQL 查询的工作量,使得数据库操作更加直观。 - **提高效率**: 通过缓存机制、懒加载等技术,Hibernate 可以有效提高应用程序性能。 - **增强可维护性**: 采用 ...

    hibernate第一个hibernate

    Hibernate提供了缓存机制,如一级缓存(Session级别的)和二级缓存(SessionFactory级别的),以提高性能。另外,合理的配置和使用批处理、延迟加载等特性也能有效提升应用性能。 10. 扩展与进阶: Hibernate支持...

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    jsf+spring+hibernate的架构和例题

    **开发流程**:在这样的架构下,开发者通常会首先定义业务实体类(用Hibernate的注解或XML配置),然后创建Spring Bean来实现业务逻辑,接着在JSF页面上设计用户界面,通过Managed Beans与Spring Bean交互,最后利用...

    hibernate源码分析一[启动过程]

    这些参数包括数据库连接细节、事务管理策略、缓存机制等,是Hibernate初始化和运行时必不可少的基础配置。 #### Settings类 `Settings`类负责存储由`Configuration`类解析出来的系统配置信息。它将诸如数据库连接...

    hibernate 和hibernate_annotations(中文API).pdf帮助文档

    三、Hibernate工作流程 1. 加载SessionFactory:根据Hibernate配置文件创建SessionFactory对象。 2. 创建Session:通过SessionFactory获取Session对象。 3. 开启事务:Session提供beginTransaction()方法开启事务...

    Spring+Hibernate+Struts工作原理

    Hibernate还提供了缓存机制,包括一级缓存(SessionFactory级别的缓存,每个Session操作的对象会缓存在此)和二级缓存(可选,用于跨Session共享数据,可以使用第三方缓存实现如EhCache)。 【Hibernate优化策略】 ...

    Hibernate、Spring和Struts工作原理及使用理由

    它支持懒加载、级联操作、缓存机制等特性,提高了数据操作的效率和便捷性。同时,Hibernate还提供了 Criteria、HQL(Hibernate Query Language)等查询方式,使得数据库查询更加灵活和直观。 SSH框架组合的使用理由...

    hibernate数据库相关操作步骤

    通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向对象的方式来管理和操作数据。本文将详细介绍使用Hibernate进行数据库操作的步骤。 1. **配置Hibernate** - 创建`hibernate.cfg.xml`配置文件:...

Global site tag (gtag.js) - Google Analytics