您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Hibernate总结
1Hibernate总结HIBERNATE总结..................................................................................1一、HIBERNATE框架及ORM..............................................................21.1HIBERNATE的定义:.........................................................................21.2ORM的定义:...............................................................................21.3HIBERNATE框架的优点:.................................................................21.4HIBERNATE框架的缺点:.................................................................31.5HIBERNATE中JAVA对象的三种状态..............................................32.3三种状态转换的详解....................................................................4二、HQL实用技术..............................................................................52.1编写HQL语句................................................................................52.2执行HQL语句...............................................................................52.3在HQL查询语句中绑定参数........................................................5三、HIBERNATE关联映射...................................................................73.1多对一映射关联(MANY-TO-ONE).................................................73.2一对多映射关联(ONE-TO-MANY).................................................73.3一对一映射关联............................................................................73.4多对多关联(MANY-TO-MANY).......................................................8四、HIBERNATE缓存机制...................................................................924.1缓存的概念:..............................................................................94.2HIBERNATE缓存分类:...................................................................94.3一级缓存详解................................................................................94.4二级缓存详解..............................................................................10一、Hibernate框架及ORM1.1Hibernate的定义:Hibernate是数据持久化工具,是一个开放源代码的对象关系映射框架。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。1.2ORM的定义:ORM全称“Object/RelationMapping”即对象关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。(此图暂时省略)1.3Hibernate框架的优点:Hibernate功能强大,是Java应用与关系数据库之间的桥梁,较之JDBC操作数据库,代码量大大减少,提高了持久化代码的开发速度,降低了维护成本。Hibernate支持许多面向对象的特性,如组合、继承。使得开发人员不必在面向业务领域的对象模型和面向数据库的关系型数据模型之间来回切换,方便开发人员进行领域驱动的面向对象的设计与开发。可移植性好。系统不会绑定在某个特定的关系型数据库上,对于系统更换数据库,通常需要修改Hibernate配置文件即可正常运行。Hibernate框架开源免费,可以在需要时研究源代码,改写源代码,进行功3能的定制,具有可扩展性。Hibernate适用于中大型项目。1.4Hibernate框架的缺点:不适合以数据为中心,大量适用存储过程的应用。大规模的批量插入、修改、删除不适合用Hibernate。Hibernate不适用于小型项目,也不适用于关系模型设计不合理、不规范的系统。1.5Hibernate中Java对象的三种状态Hibernate框架通过Session来管理Java对象的状态,在持久化生命周期中,Java对象存在这以下三种状态:1.瞬时状态(Transient):通过new创建对象后,对象并没有立刻持久化,它并未与数据库中的数据有任何的关联,此时Java的状态为瞬时状态。Session对于瞬时状态的Java对象是一无所知的,当对象不再被其它对象引用时,它的所有数据也就丢失了,对象会被Java虚拟机按照垃圾回收机制处理。2.持久状态(Persistent):当对象与Session关联,被Session管理时,它就处于持久状态。处于持久状态的对象拥有数据库标识。与Session发生关联的两种方式为:第一,通过Session的查询接口,比如get方法或load方法。第二,针对于瞬时状态的对象,通过Session的save方法或update方法,即Java对象和Session发生了关联。3.游离状态(Detached):处于持久状态的对象,脱离与其关联的Session管理后,对象就处于游离状态。处于游离状态的对象,Hibernate无法保证对象所包含的数据与数据库中的数据一致。因为Hibernate已经无法感知对该对象的任何操作。Session提供了两个方法(update、merge),将处于游离状态的对象与一个新的Session对象发生关联。此时,对象的状态就从游离状态转换为持久状态。2.2三种状态之间的转换(如下图)4表示开始表示结束2.3三种状态转换的详解1.瞬时状态转为持久状态使用Session对象的save()或saveOrUpdate()方法保存对象后,该对象的状态由瞬时状态转换为持久状态。使用Session对象的get()或Load()方法获取对象,该对象的状态为持久状态。2.持久状态转为瞬时状态执行Session对象的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时该对象没有与任何的数据库数据关联。3.持久状态转为游离状态执行了Session对象的evict()、clear()或close()方法,对象由原来的持久状态转换为游离状态。4.游离状态转为持久状态重新获取Session对象,执行Session对象的update()或saveOrUpdate()方法,该对象由游离状态转换为持久状态,该对象再次与Session对象关联。5.游离状态转为瞬时状态执行Session对象的delete()方法,对象由游离状态转为瞬时状态。处于瞬时状态或游离状态的对象不再被其它对象引用时,会被Java虚拟机按照垃圾回收机制处理。5二、HQL实用技术Hibernate支持三种查询方式:HQL(HibernateQueryLanguage)即Hibernate查询语言;Criteria查询和原生SQL(NativeSQL)查询。2.1编写HQL语句2.1.1from子句使用方法:from+全限定类名2.1.2select子句使用方法:select+属性名from全限定名as全限定名的别名2.1.3where子句Where子句用于表达查询的限制条件,使用方法,加在from子句后面。2.1.4使用函数表达式举例说明:lower()函数和upper()函数2.1.5orderby子句用于按照指定的属性排序。例如按照员工的薪水排序:Fromemporderbysalarydesc;2.2执行HQL语句步骤:首先编写好HQL语句,然后构建Query对象。最后执行Query对象的list()方法或者是iterator()方法。以下是查询所有员工姓名的示例代码://构建HQL语句Stringhql=fromEmp;//构建Query对象Queryquery=session.createQuery(hql);//执行查询语句ListEmpempList=query.list();for(Empemp:empList){System.out.println(员工姓名:+emp.getEmpName());}2.3在HQL查询语句中绑定参数2.3.1HQl的参数绑定有以下两种形式:按参数位置绑定。在HQl语句查询语句中,用“?”占位符来定义参数的位置,例如;Queryquery=session.createQuery(“fromEmpwhere6job=?Andsal?”);query.setString(0,job);query.setDouble(1,sal);按照参数名称绑定。在HQL语句中定义命名参数,命名参数以“:”开头,例如:Queryquery=session.createQuery(“fromEmpwherejob:=empJob”);query.setString(“empJob”,”clerk”);2.4绑定各种类型的参数(较简单,不再举例说明)setParameter()方法,绑定任意类型的参数setProperties()方法,绑定命名参数与一个对象的属性值2.5Query对象的两种查询方法:query.list();获取一个集合列表query.uniqueResult();获取唯一的结果注意:当查询结果不唯一时,如果调用query.uniqueResult()方法时,会报错如下错误:org.hibernate.NonUniqueResultException:querydidnotreturnauniqueresult;2.6实现数据的分页查询Hibernate实现分页的方法是通过setFirstResults(intfirstResult)和setMaxResults(intmaxResults)方法实现。其中,setFirstResults()用于设置第一条记录的位置,setMaxResults()用于设置最大返回的记录条数。具体步骤如下:(1)使用聚合函数count()放获
本文标题:Hibernate总结
链接地址:https://www.777doc.com/doc-4645958 .html