Hibernate PPT整本书课件完整版电子教案全套课件最全教学教程ppt(最新).pptx
《Hibernate PPT整本书课件完整版电子教案全套课件最全教学教程ppt(最新).pptx》由会员分享,可在线阅读,更多相关《Hibernate PPT整本书课件完整版电子教案全套课件最全教学教程ppt(最新).pptx(698页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、,第一章 Hibernate入门, 理解Hiberate原理 掌握如何搭建Hibernate开发环境 理解持久化对象的状态与转换 掌握Hibernate的配置 了解Hibernate的常用接口,1,本章指引,1.1 SSH概述 1.2 Hibernate简介 1.3 第一个HiBernate项目 1.4 映射文件详解 1.5 配置文件详解 1.6 Hibernate持久化对象 1.7 Hibernate的核心接口简介 1.8 上机实验,2,1.1 SSH概述,3,SSH是JavaEE的 spring,struts2,Hibernate三大框架的缩写,提高数据库的操作效率,控制程序的跳转。使用了
2、MVC原理 以及文件上传下载、数据验证、众多 功能标签等技术,为类与类之间的过度依赖提供解决方案,以及方便地以AOP方式切入系统级业务,并且接管Hibernate的数据库配置,事务管理等,整合了其余两个框架。,1.2 Hibernate简介,Hibernate是当前流行的一种ORM(Object Relational Mapping,对象关系映射)框架。,什么是ORM?,有了ORM,JavaEE开发者就可以使用面向对象的编程思想来操作数据库,取代传统的JDBC。通过操作Java对象,就可以完成对数据库表的操作。,1.2 Hibernate简介,Hibernate对应三层架构开发中的数据访问层、
3、JDBC访问数据库的代码做了轻量级封,是“全自动”的ORM框架。,支持许多面向对象的特性,如组合,继承,多态等,Java开发者可以自由地使用对象编程思维来操纵数据库,支持一对多,多对多关联,连接查询,级联操作,缓存等,功能强大,可移植性好,可适用于多种数据库,是一种开源框架,必要时可以自行编码进行扩展。,可以自动生成SQL语句并自动执行,不能使用存储过程 不太适合大规模的批处理 不适合小型项目 与MyBatis相比,较为复杂,不易掌握。 使用面向对象的HQL查询语言,有些人使用起来不太习惯。,特点,缺点,1.2 Hibernate简介,点击图1.2中的3.6.10.Final链接,下载其中的h
4、ibernate-distribution-3.6.10.Final-dist.zip压缩包 解压后文件结构如图1.4所示,下载Hiberante,1.2 Hibernate简介,Hiberante项目必须的jar包,log4j-1.2.17.jar和slf4j-log4j12-1.7.12.jar这2个jar包用于整合Hibernate的日志系统log4j(这两个jar包需要另外上网搜索下载),1.3 第一个Hibernate项目,1.3.1 创建项目并导入JAR包, 首先在Eclipse中创建一个Web项目ssh01 将表1.1中Hibernate所需10个jar包复制到项目的WEB-IN
5、F/lib目录中 此外还需要连接MySQL数据库,需要添加MySQL的驱动包,本书中使用的 MySQL驱动版本是mysql-connector-java-5.1.21.jar 复制好后,添加到构建路径中,1.3 第一个Hibernate项目,1.3.2 创建数据库及表,本书使用的数据库为MySQL5.7.18,客户端使用SQLyog,在MySQL中创建一个名称为studentdb的数据库,在此数据库中创建一张名为student的数据表,1.3 第一个Hibernate项目,1.3.3 创建持久化类,持久化类与数据库表相对应,持久化类的属性名称、个数、类型都与数据库表的列名、个数、类型一一对应。
6、,在项目src目录下,创建com.seehope.entity包,并在包中创建持久化类Student,类中创建与student数据表字段对应的属性,以及相应的getter和setter方法,1.3 第一个Hibernate项目,1.3.4 创建映射文件,映射文件的作用是告知Hibernate,持久化类Student映射到数据库studentdb中的哪个表,并且进一步精确地指定持久化类中的哪个属性对应数据库表中的哪个字段。,在持久化类Student所在包中,新建一个名称为Student.hbm.xml的映射文件,在该文件中指定了持久化类Student与数据库中的哪个表对应,以及类Student中
7、的每一个属性与数据库student表的字段一一对应。,Student.hbm.xml中的主要节点,1.3 第一个Hibernate项目,1.3.5 创建核心配置文件,Hibernate的配置文件主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。,在项目的src目录下创建一个名称为hibernate.cfg.xml的文件,代码如下。该文件将会在本章1.5节详细介绍。,1.3 第一个Hibernate项目,1.3.5 创建核心配置文件,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作, 在项目中新建一个名称为com.seehope.test的包,然
8、后创建Main.java文件。接下来,在该文件中创建4个方法分别进行增删改查操作。 添加数据:在Main类中编写添加数据的方法insertTest(),实现添加一个学生的功能,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作,使用JUnit4测试运行insertTest()后在MySQL数据库中查询student表的数据,从图1.8中可以看出,student表中添加数据成功。,这里添加数据的关键方法是session.save(stu),给人感觉保存的是Student对象stu,实际结果却是
9、数据库中新添加了一条记录,这正是hibernate的重要特性,通过操作对象就能实现数据库操作。,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作, 修改数据:在Main类中添加updateTest()方法,使用Hibernate来修改id为2的数据,Hibernate修改数据的基本流程与其保存数据的方法大体相同,只是后面创建了一个对象,且该对象的id是要在数据库表中事先存在的,其他属性值则可以设置成与数据库表中对应的值不同。最后通过session.update()方法执行更新操作,表面上给人感觉是更新对象,实际上数据会更新到数据库中。,1.3 第一个Hibernat
10、e项目,1.3.6 创建测试类进行增删改查操作,使用JUnit4测试运行updateTest()方法,其结果如图1.9所示。发现id为2的记录已由李白改成了杜甫。,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作, 查询单个对象数据:在Main类中,添加一个名称为getByIdTest()的查询数据的方法,用于根据指定id查询数据库中的数据,这里查询id为1的学生数据。,查询操作使用了session.get()的方法,该方法有两个参数,第一个参数指定要操作的类,第二个参数id指明要查找的对象的主键,该方法用于从数据库中查找到指定主键的数据并封装成对象数据。,1.3
11、第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作,使用JUnit4测试运行getByIdTest()方法后,控制台的显示如图所示。,图1.10查询结果分析:控制台头部出现了三行红色警告信息,这是因为没有配置log4j导致的,这里可以不必理会,接着出现了黑色的SQL语句信息,这是由于在hibernate.cfg.xml文件中配置了显示SQL语句和格式化SQL的配置信息,这说明Hibernate发出了SQL语句,向数据库查询需要的数据。最后出现的是查询结果。,除了使用Session的get()方法查找指定对象id的数据外,还有Session的load()方法也可实现同样的功能,
12、区别在于使用get()方法加载数据时,如果要查找的记录不存在,则返回null,不会报错。使用load()方法加载数据时,如果要查找的记录不存在,则会报出ObjectNotfoundException异常。,1.3 第一个Hibernate项目,1.3.6 创建测试类进行增删改查操作, 删除数据:在Main类中增加一个名称为deleteByIdTest()的方法,使用Hibernate删除一条记录,这里删除id为5的学生数据,代码如下所示。,从图1.11中可以看出,Student表中少了第5条,已被成功删除了。,首先通过get方法获得要删除的对象,然后使用Session的delete方法将该对象
13、作为参数,从而在数据库中将它删除。,1.3 映射文件详解,Hibernate映射文件用于配置将POJO对象持久化到关系型数据库中的相关信息,一个持久化类对应一个映射文件,映射文件的基本结构如下所示。,1.3 映射文件详解,节点用来声明一个持久化类并且指定了Java持久化类与数据库表之间的映射关系,主要节点说明,节点用来设定持久化类的OID(Object Identifier对象标识符,唯一地标识一个对象,类似表的主键)和数据库表的主键的映射关系。,可选的子节点:结点用于指定了主键的生成方式,也称为主键生成策略。主键既可以通过程序指定,也可由数据库自动生成,但数据库自动生成的话因不同数据库还是有
14、所差别,比如MySQL的主键可以通过自增长实现,SQL Server通过标识列实现,而Oracle的要通过序列才能实现。通过节点,就可以指定这些不同的实现方式。,1.3 映射文件详解,主要节点说明,Hibernate提供了几个内置的主键生成策略,如表所示。,节点用来指定持久化类的普通属性与数据库表中的普通字段的映射关系。property节点的常用属性有name、column和type三个。name用来指定持久化类中的属性名,column用来指定数据库表中的对应字段名,type用来指定持久化类属性的数据类型。,1.5 配置文件详解,1.5.1 基本配置,hibernate.cfg.xml配置文件
15、使用property节点来配置Hibernate连接数据库的一些重要信息,如数据库的方言、驱动、URL、用户名和密码等,并使用mapping节点来加载映射文件的信息。文件名称固定为hibernate.cfg.xml,一般放置在src目录下。hibernate.cfg.xml配置文件的常见配置请参见1.3.5。其常用属性名称及用途如表所示。,1.5 配置文件详解,1.5.2 配置c3p0连接池,Hibernate中也可以使用c3p0连接池进行连接以提高数据库连接的性能与效率。,在下载的Hibernate解压缩包的lib目录下的子目录optional中找到C3P0的jar包c3p0-0.9.1.j
16、ar,复制到项目ssh01的WebContent/WEB-INF/lib下,并添加到构建路径,然后在hibernate.cfg.xml中新添加如下代码,使用Junit4运行测试类Main中的insertTest()方法。查看数据库,插入数据成功,表明C3P0连接池的配置成功。,1.6 Hibernate持久化对象的状态,1.6.1 持久化对象的状态,持久化就是指将Java运行时的对象数据永久存储到关系型数据库中。在Hibernate中,根据内存中的对象与数据库表中对应记录是否同步关联,持久化对象分为三种状态,分别是瞬时状态、持久状态和游离状态。,瞬时状态(transient) 瞬时状态是指内存
17、中的对象刚刚创建(new)出来,还没有与Session关联,与数据库中的数据无任何关联,在数据库中没有对应的记录,在内存中孤立存在着,若无其他操作或引用,最后将会被JVM垃圾回收。瞬时对象没有持久化标识OID。 持久状态(persistent) 持久状态的对象与session相关联,且相关联的Session尚未关闭,在数据库有对应的记录,持久状态对象有持久化标识OID。 游离状态(detached) 当持久化对象相关联的session关闭时就变成了游离状态。虽然此时对象仍有OID,并且数据库中有对应的记录,但该对象没有与session相关联,Hibernate已检测不到它的变化。,1.6 Hi
18、bernate持久化对象的状态,1.6.2 持久化对象状态转换,Hibernate持久化对象的三种状态,是可以通过Session的一系列方法进行转换的, 瞬时状态转换到其他状态 刚刚创建new出来是处于瞬时状态。 瞬时状态转换为持久状态:执行Session的save()或saveOrUpdate()方法。 瞬时状态转换为游离状态:为瞬时状态对象设置持久化标识OID。 瞬时状态和游离状态都没有Session的关联,它们的区别在于瞬时状态没有OID,游离状态对象存在OID,,1.6 Hibernate持久化对象的状态, 持久状态对象转换到其他状态 持久化对象可以通过Session的get()、lo
19、ad()方法,或者Query查询从数据库获得。 持久状态转换为瞬时状态:执行Session的delete()方法,持久化对象被删除后,虽然在内存中仍然存在,但不建议再使用,由JVM自行回收。 持久状态转换为游离状态:执行Session的evict()、close()或clear()方法。evict()方法用于清除一级缓存中某一对象。close()方法用于关闭Session,清除一级缓存。clear()方法用于清楚一级缓存的所有对象。, 游离状态对象转换到其他状态 游离状态对象不能直接获得,只能由其他状态对象转换而来的。 游离状态转换为持久状态:执行Session的update()、saveOr
20、Update()或lock()方法。 游离状态转换为瞬时状态:将游离状态的的持久化标识OID设置为null。例如,在 BookTest.java中的session.close()操作后,加入代码book.setId(null),当程序执行完book.setId(null)代码后,book对象由游离态转换为瞬时状态。,1.6 Hibernate持久化对象的状态,持久化对象的状态实例, 在ssh01项目的包com.seehope.test下新建TestState测试类,上述代码中,stu对象由new关键字创建,此时还未与Session进行关联,它的状态为瞬时状态,在执行了session.save(
21、stu)操作后,stu对象被纳入了Session的管理范围,这时的stu对象变成了持久状态,程序执行完了commit()操作并关闭了Session后,stu对象与Session的关联被关闭,此时stu对象就变成了游离状态。最后游离状态清除了OID,又变成了瞬时状态。,1.6 Hibernate持久化对象的状态,持久化对象的状态实例, 使用JUnit4测试运行,结果如下图所示。,从图1.13可以看出执行save()方法之前id值为null,这时它是属于瞬时状态,执行save()方法之后stu对象的id属性有了值13(持久化标识OID),表明stu对象变成了持久状态,这也证明了瞬时状态对象和持久状
22、态对象的区别是:持久状态对象OID有值并且与Session进行了关联。当程序继续向下执行至session.close()时,stu对象脱离了session的管理,此时stu对象变成了游离状态,但stu对象的OID值依然存在,这也证明了游离状态对象与持久状态对象的相同点是都有OID值,不同点就是游离状态对象没有了Session关联。,1.7 Hibernate的核心接口简介,在Hibernate中有Configuration、SessionFactory、Session、Transaction、Query、Critreia 共6个常用的核心接口。,1.7.1 Configuration接口, C
23、onfiguration是最先用到的一个接口,使用Hibernate时,首先要创建Configuration实例才能开启其他一系列操作。 Configuration实例主要用于启动、加载和管理hibernate的配置文件。 Hibernate启动时,Configuration实例会查找Hibernate配置文件hibernate.cfg.xml,读取其相关配置,然后创建一个唯一的SessionFactory实例,创建完SessionFactory后,Configuration实例生命周期就此结束。,Hibernate创建Configuration实例使用右述代码,这种方法默认会去src下读取h
24、ibernate.cfg.xml配置文件。如果配置文件不是放在src下也是可以的,但需要指定其实际位置。,1.7 Hibernate的核心接口简介,1.7.2 SessionFactory接口, SessionFactory实例通过Configuration实例获取,用于Hibernate的初始化和建立Session对象,其获取过程如下代码所示。, 由于SessionFactory是线程安全的,它的同一个实例能同时给多个线程共享,并且它是重量级的不能随便创建和销毁它的实例,所以一个项目中一般只需要一个SessionFactory实例就行了(除非一个项目有多个数据源才需要创建多个SessionF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate PPT整本书课件完整版电子教案全套课件最全教学教程ppt最新 PPT 课件 完整版 电子 教案 全套 教学 教程 最新
限制150内