hibernate持久化
- 格式:doc
- 大小:41.50 KB
- 文档页数:3
hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
hibernate的save方法Hibernate中的save方法是用来将对象持久化到数据库中的。
下面将详细介绍Hibernate的save方法以及相关内容。
Hibernate是一个开源的Java持久化框架,它是基于JDBC的ORM框架,提供了面向对象的数据操作方式。
Hibernate的核心思想是将对象和数据库之间的映射关系进行配置,通过框架提供的API来进行数据库的操作,从而避免了编写大量的JDBC代码以及手动处理对象与数据库之间的转换问题。
在Hibernate中,使用Session对象来进行数据库的操作。
Session类是Hibernate中的核心类之一,它代表了与数据库之间的一次会话。
在Session中,有许多方法可以用于数据库操作,其中之一就是save方法。
save方法用于将一个对象持久化到数据库中。
调用save方法时,Hibernate会生成一条INSERT语句,将对象的属性值插入到数据库的对应表中。
具体的步骤如下:1. 配置Hibernate的SessionFactory:在使用Hibernate之前,需要配置一个SessionFactory对象,该对象是用来创建Session的工厂对象。
2. 创建Session对象:要使用Hibernate进行数据库操作,首先需要创建一个Session对象。
可以通过SessionFactory来创建Session对象,也可以使用现有的Session对象。
3. 创建一个实体类对象:要将一个对象保存到数据库中,首先需要创建一个实体类的对象。
这个实体类对象应该是一个持久化类,在Hibernate的配置文件中进行了配置,指明了与数据库中的哪个表进行映射。
4. 调用save方法:通过Session对象的save方法来将实体类对象持久化到数据库中。
Hibernate会自动生成INSERT语句,并将对象的属性值插入到数据库的对应表中。
6. 关闭Session对象:在数据库操作完成之后,需要关闭Session对象,释放资源。
Hibernate注解中CascadeType用法汇总在Hibernate中,CascadeType注解用来配置实体之间的级联操作。
级联操作是指在对一个实体进行持久化、更新、删除等操作时,同时也对关联的其他实体进行相应的操作。
CascadeType注解常用于一对一、一对多、多对多等关联关系中。
CascadeType注解的常用取值有以下几种:1. CascadeType.ALL:表示所有的级联操作,包括持久化、更新、删除等。
2. CascadeType.PERSIST:表示级联持久化操作,即当实体被持久化时,关联的其他实体也会被持久化。
3. CascadeType.MERGE:表示级联更新操作,即当实体被更新时,关联的其他实体也会被更新。
4. CascadeType.REMOVE:表示级联删除操作,即当实体被删除时,关联的其他实体也会被删除。
5. CascadeType.REFRESH:表示级联刷新操作,即当实体被刷新时,关联的其他实体也会被刷新。
6. CascadeType.DETACH:表示级联脱管操作,即当实体脱管时,关联的其他实体也会被脱管。
7. CascadeType.ALL_DELETE_ORPHAN:表示级联删除操作,并且会删除所有孤儿实体。
下面是对CascadeType注解的使用方法进行汇总:1.一对一关联关系:```private Address address;```上述代码表示当保存、更新或删除一个实体对象时,操作对应的address实体也会被保存、更新或删除。
2.一对多关联关系:```private List<Order> orders;```上述代码表示当保存、更新或删除一个用户对象时,操作对应的所有订单对象也会被保存、更新或删除。
3.多对多关联关系:```private List<Role> roles;```上述代码表示当保存、更新或删除一个用户对象时,操作对应的所有角色对象也会被保存、更新或删除。
hibernate框架的工作原理Hibernate框架的工作原理Hibernate是一个开源的ORM(Object-Relational Mapping)框架,它将Java对象映射到关系型数据库中。
它提供了一种简单的方式来处理数据持久化,同时也提供了一些高级特性来优化性能和可维护性。
1. Hibernate框架的基本概念在开始讲解Hibernate框架的工作原理之前,需要先了解一些基本概念:Session:Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。
SessionFactory:SessionFactory是一个线程安全的对象,它用于创建Session对象。
通常情况下,应用程序只需要创建一个SessionFactory对象。
Transaction:Transaction是对数据库操作进行事务管理的接口。
在Hibernate中,所有对数据库的操作都应该在事务中进行。
Mapping文件:Mapping文件用于描述Java类与数据库表之间的映射关系。
它定义了Java类属性与数据库表字段之间的对应关系。
2. Hibernate框架的工作流程Hibernate框架主要分为两个部分:持久化层和业务逻辑层。
其中,持久化层负责将Java对象映射到数据库中,并提供数据访问接口;业务逻辑层则负责处理业务逻辑,并调用持久化层进行数据访问。
Hibernate框架的工作流程如下:2.1 创建SessionFactory对象在应用程序启动时,需要创建一个SessionFactory对象。
SessionFactory是一个线程安全的对象,通常情况下只需要创建一个即可。
2.2 创建Session对象在业务逻辑层需要进行数据访问时,需要先创建一个Session对象。
Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。
2.3 执行数据库操作在获取了Session对象之后,就可以执行各种数据库操作了。
1、HIBERNATE 中持久化类实例的三种状态
1.1 临时状态
特征:
a.不存在于session实例的缓存中,不与任何session实例相关联
b.在数据库中没有民之相对应的记录
促使持久化类实例进入临时状态的情况如下:
a.通过new语句创建新的持久化类实例。
b.通过执行delete()方法删除持久化类实例。
1.2 持久化状态
特征:
a.存在于session实例的缓存中,与session实例相关联。
b.在数据库中有与这相对应的记录。
c.session实例在清理缓存时会根据持久化类实例属性的变化更新数据库。
促使持久化类实例进入持久化状态的情况如下:
a.通过执行save()或saveOrUpdate()方法使临时对象转变为持久化对象。
b.通过执行update()或saveOrUdate()方法使游离对象转变为持久化对象。
c.通过执行load()或get()方法返回的持久化实例都是持久化类对象。
d.通过执行find()方法返回的list集合中的持久化实例都是持久化类对象。
e.在允许级联保存的情况下,session实例在清理缓存时会把与持久化对象关
联的临时对象转变为持久化对象。
1.3 游离状态
特征:
a.不存在于session实例的缓存中,不与任何session实例相关联
b.在数据库中有与之相对应的记录(前提条件是没有其他session实例删除该
记录).
促使持久化类实例进入临时状态的情况如下:
a.通过执行evict()方法,可以从session实例的缓存中删除一个持久化类
实例,使之转变为游离对象。
b.通过执行clear()方法,可以清空session实例的缓存,使缓存中的所有
持久化类实例转变为游离状态
c.通过执行close()方法,可以销毁session实例,从而清空session实例
的缓存。
2、三种状态之间的转换
save()方法:
* 1.应尽量在调用save()方法之前完成对持久化类实例的修改,如果已经通过save方法对持久化类实例进行了持久化操作,再修改持久化类实例,在提交事务时将多执行一条update语句,影响运行速度。
* 2.坚决避免重持久化同一持久化类实例。
Update()方法:
* 1.当通过update方法将游离对象转变为持久化对象之后,并对持久化对象做了修改,在这种情况下并不需要调用save或update方法
* 2.如果在一次事务中对持久化对象做了多次修改,hibernate同样只生成一条update语句。
*3.通过update方法将一个持久化类实例从游离状态转变为了持久化状态,但并未对该持久化对象做任何修改,在默认情况下,同样会在关闭session实例时执行一条update语句,、
*可以通过修改配置文件将:select-befor-update属性设为true,默认为false,当设为true时,会在执行update语句之前执行一条select语句,判断持久化对象与数据库
*当中的记录是否一致如果一致则不执行update,否则执行,
*建议:对于很少发生改变的持久化类可以采用这种配置,因为执行select语句的效率要比执行update语句的效率高,对于常发生改变的类,建议不要采用这种配置,那样每次都会多执行一条语句。
delect()方法
* 1.通过此方法可以删除持久化类实例(可以是持久化对象,也可以是游离状态)
* 2.批量删除时可用如下代码:
Query query=session.createQuery("delete from Users");
query.executeUpdate();//只执行一条删除语句
get()方法
1.当通过此方法加载指定的持久化实例时,如果在数据库中存在相应的记录,则返回持久化类实例,不存在则返回
null
2.当存在的时候总是立即返回,即使是在映射文件中设置该类采用延迟检索策略
3.当通过此方法加载指定的持久化类实例时,hibernate首先会检索当前session实例的缓存,如果存在,则直接
返回该持久化类实例的引用,否则继续检索二级缓存(前提条件是引入了二级缓存),最后在缓存中检索不到的情况下才执行select语句,从数据库检索。
4.通过此方法加载得到的持久化类实例便位于session实例的缓存中,也可以理解为通过此方法可以将指定的持久化
了的实例加载到当前session实例的缓存中,在这种情况下,如果对持久化类实例做了修改,并不需要执行save 方法修改。