使用hibernate实现数据的增删改查

上传人:101****457 文档编号:89273116 上传时间:2019-05-22 格式:PPT 页数:15 大小:557.50KB
返回 下载 相关 举报
使用hibernate实现数据的增删改查_第1页
第1页 / 共15页
使用hibernate实现数据的增删改查_第2页
第2页 / 共15页
使用hibernate实现数据的增删改查_第3页
第3页 / 共15页
使用hibernate实现数据的增删改查_第4页
第4页 / 共15页
使用hibernate实现数据的增删改查_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《使用hibernate实现数据的增删改查》由会员分享,可在线阅读,更多相关《使用hibernate实现数据的增删改查(15页珍藏版)》请在金锄头文库上搜索。

1、第12章 使用Hibernate实现 数据的增删改查,目 录,1,2,基于XML映射文件实现数据的增删改查,基于Annotation注解实现数据的增删改查,2,12.1,基于XML映射文件实现数据的增删改查,3,12.1.1 Hibernate数据操作流程,4,作为一个优秀的持久层框架,Hibernate很容易入门。应用程序无须直接访问数据库,甚至无须理会底层采用何种数据库这一切对应用程序完全透明,应用程序只需创建、修改、删除持久化对象即可; Hibernate则负责把这种操作转换为对指定数据表的操作。在使用Hibernate框架前,先来看看Hibernate是如何实现ORM框架的,即Hibe

2、rnate的执行流程,如图所示。 通过Hibernate操作数据库需要以下步骤: (1) 读取并解析配置文件; (2) 读取并解析映射信息,创建SessionFactory; (3) 打开Session; (4) 开启一个事务; (5) 执行数据库操作 (6) 提交事务(回滚事务); (7) 关闭Session、关闭SessionFactory。,12.1.2 添加数据,5,通过一个添加数据的实例来体验Hibernate的魅力。本实例采用的数据库为MySQL 5.7,使用Hibernate向数据库restrant中的users表中添加新记录。 数据表users部分字段如表所示。 在MyEcli

3、pse中创建Java项目,名称为hibernate-1。在项目中新建文件夹“lib”,用于存放项目所需的jar包,项目hibernate-1最终的目录结构如图所示。,12.1.2 添加数据,6,将第11章中11.2小节中的Hibernate必需的jar包,复制到该项目下的lib目录中,即完成了Hibernate的安装。 将MySQL的JDBC驱动包也复制到该项目的lib目录中,这里使用的版本为“mysql-connector-java-5.1.42-bin.jar”。 选中该项目lib目录下的所有jar包,右击并选择“Build Path” “Add to Build Path”命令,将这些j

4、ar包添加到项目的构建路径中。 创建实体类User.java(对应数据表users) 编写映射文件 User.hbm.xml 编写Hibernate配置文件 hibernate.cfg.xml 编写测试类 HibernateTest.java 运行测试方法testSaveUser,Hibernate的对象3种状态转变,7,Hibernate以面向对象的方式实现对数据库的操作,即将对数据表和字段的操作转变为对实体类和属性的操作。在这一过程中,Hibernate对象经历了状态的变迁。 Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(

5、Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。 Hibernate的对象3种状态转变关系如图所示。 Hibernate的对象由瞬时态或托管态转变为持久态的方法有:save()、load()或get()、find()、update()、saveOrUpdate()和lock() Hibernate的对象由持久态转变为托管态的方法有:close()、evict(),Hibernate的对象3种状态转变,8,由new关键字创建的对象,如果它与数据库中的数据没有任何关联,也没有通过Session实例进行

6、任何持久化操作,则该对象处于瞬时态。瞬时态对象一旦不再被其他对象引用,那么很快将被Java虚拟机回收。例如,测试类中通过new关键字创建的实体类user,其状态为瞬时态。 在Hibernate中通过Session的save()和saveOrUpdate()方法,可以将瞬时对象转变成持久态对象,同时将对象中携带的数据插入到数据库表中。处于持久态的对象在数据库中具有相应的记录,并拥有一个持久化标识。持久态对象位于一个Session实例的缓存中,即总是与一个Session实例相关联。当Session清理缓存时,会根据持久态对象的属性的变化,同步更新数据库。例如,测试类中调用Session实例的sav

7、e方法后,user对象的状态由瞬时态转变为持久态。 如果持久态对象的相关联的Session实例执行delete()方法之后,持久态对象将转变为瞬时态,同时删除数据库中相应的记录,该对象不再与数据库的记录相关联。 如果持久态对象的相关联的Session实例执行close方法、clear方法或者evict方法之后,持久态对象将转变成托管态。例如,测试类中调用session.close()方法关闭Session后,user对象状态由持久态转为托管态。此后,如果user对象中属性值发生变化,Hibernate不会再将变化同步到数据库中。 托管态对象如果不再被任何对象引用,将很快被垃圾回收。如果被重新关

8、联到Session上时,托管态对象将再次转变为持久态。托管态对象具有数据库记录标识,可以使用Session的update()或者saveOrUpdate()方法将托管态对象转变为持久态,即对象与数据库记录同步。 托管态对象与瞬态对象相同之处在于:如果不再被任何对象引用,将很快被垃圾回收;不同之处在于:托管态对象有数据库记录标识,瞬态对象没有。,12.1.3 加载数据,9,加载数据是指通过标识符得到指定类的持久化对象,可以通过Session实例加载数据,Session提供了两种方法来加载数据,分别如下: Object get(Class class, Serializable id):通过实体类

9、class对象和id加载数据。 Object load(Class class, Serializable id):通过实体类class对象和id加载数据。 使用get()方法:在测试类HibernateTest中,添加testGetUser()方法,并使用Test注解加以修饰,实现从数据表users中加载编号Id为1的用户对象,并在控制台输出。 使用load()方法:在测试类HibernateTest中,添加testLoadUser()方法,并使用Test注解加以修饰,实现从数据表users中加载编号Id为1的用户对象,并在控制台输出,12.1.4 删除数据,10,删除数据是指根据主键值将一

10、条记录从数据表中删除,可以通过Session实例的delete(Object obj)方法来删除数据库中的记录。delete方法的参数obj表示要删除的持久态对象。因此在调用delete方法前,需要通过Session的get方法获得指定标识的持久态对象。 在测试类HibernateTest中,添加testDeleteUser()方法,并使用Test注解加以修饰,实现将数据表users中编号id为8的记录删除。,12.1.5 修改数据,11,通过Session实例的update(Object obj)方法可以修改数据库中的记录,参数obj表示要修改的对象。update方法可将一个处于托管态的对象

11、加载到Session缓存中,与一个具体的Session实例关联,使其状态转变为持久态。在调用update方法前,需要通过Session的get方法获得指定标识的持久态对象。 在测试类HibernateTest中,添加testUpdateUser()方法,并使用Test注解加以修饰,实现将数据表users中编号Id为2的记录中登录名由“shijun”修改为“sj”。 以面向对象的思维编写代码是Hibernate持久化操作的一个理念。,12.2,基于Annotation注解实现数据的增删改查,12,12.2 基于Annotation注解实现数据的增删改查,13,从JDK 1.5开始,Java增加了

12、Annotation注解技术解决方案,将原来通过XML配置文件管理的信息改为通过Annotation进行管理,从而实现Hibernate的零配置。 Hibernate的Annotation方案是以Java持久化(Java Persistence API,简称JPA)为基础,进一步扩展而来。 使用Annotation注解实现数据的CRUD步骤如下: (1) 先将项目hibernate-1复制并命名为“hibernate-2”,再导入到MyEclipse开发环境中。 (2) 修改实体类User.java,通过Annotation注解将数据表与实体类之间的映射在实体类中完成,无需使用映射文件,因此需

13、要先将项目hibernate-2的com.hibernate.entity包中的映射文件User.hbm.xml删除,然后修改实体类User.java。 (3) 修改Hibernate配置文件。,12.2 基于Annotation注解实现数据的增删改查,14,JPA (Java Persistence API)规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java实体类和XML映射文件),将映射信息(写在Annotation中)与实体类集中在一起。 在实体类User.java代码中,使用了Entity注解、Table注解、Id注解、GeneratedValue注解和Column注解,这些注解的含义如表所示。 主键生成策略通过GenerationType来指定,有以下几种: GenerationType.IDENTITY GenerationType.AUTO GenerationType.SEQUENCE GenerationType.TABLE,总结,15,本章讲解了基于XML映射文件实现数据的增删改查操作,以及基于Annotation注解结束实现Hibernate的零配置。 Hibernate带来的开发上的便捷还有很多,通过后面的学习,读者将逐步领略Hibernate框架的魅力所在。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号