Hibernate5讲义

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Hibernate5框架技术课程讲义北京动力节点教育培训公司制作人:郭哥2015年10月北京动力节点中国Java培训的黄埔军校2Hibernate5讲义第1章Hibernate概述Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。----百度百科《Hibernate》一、什么是对象持久化所谓持久化(Persistence),即把数据(如内存中的对象)保存到持久化设备,即可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储到关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。二、为什么要持久化(1)内存不能持久;(2)内存容量有限(内存是用于存放计算数据的);(3)业务数据共享的需要(需要公共的持久设备);(4)为了使用大规模的检索(所以要将数据改为适合大规模检索的格式);(5)数据管理的需要(安全、备份)三、怎样实现持久化1、对象序列化即实现了Serializable接口的类。适合于少量的对象进行暂时的持久化,适合于在网络上传输对象。但不符合企业级应用的需要。因为企业应用中对数据的要求是大量的、长时间保存的、需要进行大规模查询。北京动力节点中国Java培训的黄埔军校32、JDBC优点:功能完备、从理论上说效率是最高的;可以存储海量的数据并且适合进行大规模检索;缺点:开发效率和维护效率低;开发难度大,代码量大,占到到总代码量的1/3,或1/2;3、ORMORM,即Object-RelationalMapping,对象关系映射。它是一种解决问题的思路,是一种思想。它的实质就是将关系数据库中的业务数据用对象的形式表示出来,并通过面向对象的方式将这些对象组织起来,以实现系统业务逻辑。或者说,ORM就是内存中的对象与数据库中的数据间的映射关系。ORM的特点:开源的,实现了JDBC的封装,实现了简单的API,轻量级解决方案,持久化对象是一个POJO类。最有名的ORM框架就是Hibernate。4、JPA框架JPA,JavaPersistenceAPI,是JavaEE5的标准ORM接口。它是一种规范,一套接口,但不是实现。用于实现这一规范的ORM很多,其中Hibernate就是之一。5、JPA、ORM与Hibernate间的关系JPA、ORM与Hibernate间的关系是,ORM是一种思想。JPA则是这种思想的具体的表现形式,是以Java语法规范表现出来的一种形式,是一套标准接口。Hibernate则是这套接口的具体实现。四、Hibernate框架Hibernate原本是JBOSS旗下的产品,2006年JBOSS被RedHat收购,变为了红帽公司的产品。北京动力节点中国Java培训的黄埔军校41、Hibernate框架下载Hibernate官网:、Hibernate基本Jar包调试Hibernate程序所需要的基本Jar包,在Hibernate框架解压目录的lib目录下。(1)reqired目录下所有Jar(2)optional/c3p0目录下所有Jar(3)optional/ehcache/slf4j-api-1.6.1.jar(4)jpa-metamodel-generator目录下所有Jar(5)jpa/hibernate-entitymanager-5.0.1.Final.jar当然,还需要一些其它的辅助Jar包。(1)junit-4.9.jar(2)slf4j-log4j12-1.7.12.jar与log4j-1.2.17.jar(3)mysql驱动北京动力节点中国Java培训的黄埔军校5第2章Hibernate基本技术一、Hibernate工作原理二、第一个Hibernate程序举例:primary1、定义持久化对象(PO)北京动力节点中国Java培训的黄埔军校62、配置映射文件配置映射文件,即配置两个关系:实体类与数据库中表的映射关系,属性与表中字段的映射关系。Hibernate中主要涉及两个配置文件:主配置文件与映射文件。这两个配置文件的约束文件在Hibernate核心Jar文件hibernate-core-5.0.1.Final.jar中的or.hibernate包中:主配置文件的约束:映射文件的约束:北京动力节点中国Java培训的黄埔军校73、配置主配置文件主配置文件中的数据库连接相关属性值可在hibernate框架解压目录下的project/etc/hibernate.properties文件中找到。方言与DB连接四要素的key:数据源的key:注意,若不指定第三方数据源,将使用Hibernate内置的数据源。该数据源无法自动将数据库连接Connection释放,而数据源作为SessionFactory的属性,一直被当前程序占用,导致SessionFactory在程序运行结束后无法自动关闭。所以在测试时会出现程序运行结束了,但Eclipse的Terminate按钮仍显示为红色运行状态。北京动力节点中国Java培训的黄埔军校84、创建数据库使用MySql自带的test数据库。北京动力节点中国Java培训的黄埔军校95、定义测试类6、修改测试类通过openSession()方式获取到的Session无法保证在同一个线程中使用的为同一个Session,因为每执行一次openSession(),都会创建一个新的Session对象。改变Session的获取方式为getCurrentSession(),会保证每个线程中的Session对象为同一个Session。注意,该方式获取到的Session,必须在事务内执行,无论是增、删、改,还是查询。且其无需再手工关闭Session对象,而是在事务提交或回滚后,自动将Session关闭了。北京动力节点中国Java培训的黄埔军校107、修改主配置文件通过getCurrentSession()获取Session,需要在主配置文件中对Session所处的上下文环境,即事务环境进行注册。这里指定其上下文件事务环境为线程,即一个线程一个事务。三、CURD操作1、工具类的创建每次在获取Session时,都需要通过Configuration对象加载主配置文件与映射文件,并且要创建SessionFactory对象,降低了开发与执行效率。所以,对于Session对象的获取,可以创建一个工具类。在primary项目中,创建一个utils顶层功能包,将工具类放入其中。北京动力节点中国Java培训的黄埔军校112、CURD测试在primary项目的基础上,再创建一个测试类MyTest。在其中通过使用工具类HbnUtil来测试增、删、改,与简单查询操作。(1)save()(2)persist()save()为Hibernate的API,而persist()为JPA的API。均用于完成持久化。北京动力节点中国Java培训的黄埔军校12(3)delete()北京动力节点中国Java培训的黄埔军校13(4)update()(5)saveOrUpdate()通过参数对象是否具有id值来判断是执行save()操作还是执行update()操作。若参数对象具有id,但该id在DB中不存在,则会抛出异常。北京动力节点中国Java培训的黄埔军校14(6)get()在查询无果时,会给出null,但不会抛出异常。(7)load()在查询无果时,会抛出异常。北京动力节点中国Java培训的黄埔军校15(8)对于增、删、改的底层SQL执行顺序对于不同操作对象的增、删、改操作,无论其代码的书写语句顺序是怎样的,底层SQL的执行顺序都是insert、update、delete。若要修改其底层的执行顺序,则可通过Session的flush()方法刷新Session完成。北京动力节点中国Java培训的黄埔军校16四、详解API1、Configuration接口org.hibernate.cfg.Configuration接口的作用是加载主配置文件及映射文件,以实现对Hibernate的启动。Configuration实例调用buildSessionFactory方法便可创建一个Session工厂SessionFactory对象。Configurationcfg=newConfiguration().configure();newConfiguration()会加载一个属性文件hibernate.properties。该属性文件中存放着数据连接配置、Hibernate配置等配置信息。一般情况下不用设置该属性文件,其设置已经放到了主配置文件中。若要设置,应将其放于src目录下。该文件的模板存放于Hibernate框架解压目录下的project/etc下。configure()方法,用于加载和解析hibernate.cfg.xml配置文件及映射文件。该方法返回一个Configuration对象。所以,cfg是一个包含配置信息及映射的Configuration对象。查看Configuration类的源码,可看到如下注释,说明,该类用于加载主配置文件及映射文件。北京动力节点中国Java培训的黄埔军校17再查看configure()方法的源码:在Configuration对象中有一个方法addClass(),用于加载映射文件。小知识:方法的定义风格Java定义方法的风格是,只完成功能而无返回结果的方法,将被定义为无返回值的方法。由于configure()方法的功能就是加载解析hibernate.cfg.xml文件,所以,若按Java定义方法的风格,应该是没有返回值的。但,configure()方法却有返回值。这是因为Hibernate类库中的所有方法的定义采用的不是Java风格,而是另一种纯OO语言—SmallTalk的方法定义风格。即,若无返回结果,则返回值就为this,即调用该方法的对象。北京动力节点中国Java培训的黄埔军校182、SessionFactory接口org.hibernate.SessionFactory接口对象是由Configuration对象通过buildSessionFactory()方法创建。创建该对象的目的是,用于开启Session对象。SessionFactorysessionFactory=cfg.buildSessionFactory();(1)SessionFactory对象特点重量级对象(系统开销大)、单例的、线程安全的。按理说,单例对象一定是被共享的,是线程不安全的。但查看SessionFactory接口的实现类SessionFactoryImpl源码,可以看其大多数成员变量是final的,所以其是线程安全的。(2)SessionFactory对象的使用原则基于其是线程安全的重量级对象,其创建与销毁时系统开销大,又是单例的特点,SessionFactory对象一般不手工关闭,而是在应用结束时自动将其销毁。因此,SessionFactory不用进行close()关闭。3、Session接口org.hibernate.classic.Session接口是应用程序与Hibernate连接的核心API,是Hibernate向应用程序提供的操纵DB的最主要接口。它提供了基本的保存、更新、删除与查询方法。由SessionFactory对象创建。Sessions=sessionFactory.openSession();(1)Session对象的特点一个轻量级对象、线程不安全的、多例的。在Web应用中,多个用户对同一应用访问,Hibernate会为每个用户创建一个Session对象。所以是多例的。session中包含大量非final成员变量,对于同一个用户的操作,可能会产生多个事务,这多个事务若同

1 / 161
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功