1. 读取并解析配置文件
Hibernate 的初始化
,
读取Hibernate 的配置信息-->创建SessionFactory
//采用默认的hibernate.cfg.xml来启动一个Configuration的实例
例
:
Configuration configuration =
new
Configuration().configure();
//如要修改默认配置文件名 当然你可以选择不修改
Configuration
configuration=new Configuration().configure(new File("src/xxx.xml"));
Configuration
说明
:
负责管理
Hibernate
的配置信息
,
这些配置信息都是从配置文件
hibernate.cfg.xml
或者
hibernate.properties
读取的
,
也可以自定义文件名称
,
只要在实例化
Configuration
时指定具体的路径即可
2.
读取并解析映射信息
,
创建
SessionFactory
例
:
SessionFactory factory = configuration.buildSessionFactory();
sessionFactory
说明
:
Configuration
的实例会根据当前的配置信息构造
sessionFactory
实例
,
他是线程安全的
,
一般情况下一个应用中的一个数据库共享一个该实例
3.
打开
Session
实例
(
它是线程不安全的
,
是共享同一个
session
,
所以要
ThreadLocal
模式来控制
)
例
:
Session session = factory.openSession();
sesion
说明
:
一般的持久化方法都是通过
Session
来调用的
,Session
是非线程安全的
4.
创建事务
Transaction
例
:
Transaction
transaction = session.beginTransaction();
5. CRUD
操作
(
执行数据操作
CRUD
增删查改
)
例
:
增加
: session.save(pojo
对象
);
增加或者修改
:session.saveOrOpdate(pojo
对象
)
//
当修改时候
,id
不存在将被抛出异常
session.update(student);
session.delete(student);
Student student =
(Student)session.get(Student.
class
, 23);
//
根据主键加载
p1=(Person)session.load(pojo
类
.class,
主键值
);
6.
提交事务
例
:
transaction.commit();
7.
关闭
Session
实例及
SessionFactory
例
:
session.close();
factory.close();
说明
:
一、
持久层对象的生命周期:
在执行
session.save(user)
之前
,
首先要获取
session
对象
,PO
只有在
Session
的管理下才可完成数据库访问
,
按
PO
与
Session
的关系
,持久化对象
可有如下三个状态
:
1
、瞬时对象(Transient Object)
:使用new
操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(
不再被任何其它对象所引用)
,它们的状态将会丢失,并由垃圾回收机制回收。
特征:
在数据库没有与之对应的记录;
没有纳入session
的管理(在session
中没有此对象);
2
、持久化对象(Persistent Object)
:持久实例是任何具有数据库标识的实例,它有持久化管理器Session
统一管理,持久实例是在事务中进行操作的----
它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL
的INSERT
、UPDATE
和DELETE
语句把内存中的状态同步到数据库中。
特征:
持久化对象在数据库中有与之匹配的数据;
纳入了session
的管理;
在清理缓存(脏数据检查)的时候会与数据库同步,也就是说当属性发生改变的时候,Hibernate
会自动的与数据库同步;
3
、托管(离线)对象(Detached Object)
:Session
关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受hibernate
管理。
特征:
在数据库中有与之匹配的数据;
没有纳入session
的管理;
三种状态的转换
1
、当一个对象new
完之后就会变成Transient
状态(Session
未开启),Transient
状态的对象随时都可能被垃圾回收机制回收。
2
、当Transient
状态的对象被执行了save
或saveOrUpdate
方法后(Session
开启且Session
未关闭)它就会变成一个persistent
状态。
3
、当persistent
状态的对象在Session
执行了evict
、close
、clear
方法后(Session
关闭)它就会变成Detached
状态。Detached
状态的对象也可以随时被垃圾回收机制回收。
4
、当Detached
状态的对象调用update
、saveOrUpdate
、lock
方法后(Session
开启并且Session
未关闭),这个对象会变成persistent
状态,当Session
调用evict
、close
、clear
方法后(Session
关闭)它又会变成Detached
状态。
5
、当persistent
状态的对象在调用delete
方法后会变成Transient
状态(Session
关闭)。
6
、hibernate
执行get
、load
、find
等方法(Session
开启且Session
未关闭),此时得到的对象是persistent
状态。
二、对
PO
的操作必须在
Session
管理下才能与数据库同步
,Session
由
SessionFactory
实例提供
,SessionFactory
是数据库编译后的内存镜像
,
通常一个应用对应一个
SessionFactory
对象。
因为SessionFactory是数据库的内存镜像,可以想象他消耗的资源,而且他是线程安全的,即可以被多个线程同时访问,所以在一个应用中,最好将SessionFactory封装为一个静态变量
;
三、Session
session是Hibernate中非常重要的一个类,通常使用的是org.hibernate,Session,他有如下特点:
单线程,短寿命对象,代表了一次会话的过程,实际上是把一个JDBC
Connection打包了,他可以包含一些持久化对象的缓存,看作介于数据连接与事务管理一种中间接口
每一个Session实例和一个数据库事务绑定
,就是说,每执行一个数据库事务操作,都应该先创建一个新的Session实例。如果事务执行中出现异常,应该撤销事务。不论事务执行成功与否,最后都应该调用Session的close方法。从而释放Session实例占用的资源;
四、获得Session对象:
首先获得SessionFactory对象,应用服务器如果访问多个数据源时,则应该产生多个SessionFactory;但是仅仅为了服务与某个请求时,不要创建一个新的SessionFactory,因为创建SessionFactory需要消耗大量的资源,然后再根据SessionFactory创建出Session对象
五、Session接口中的常用方法:
基本的CRUD操作
1、save():把java对象保存在数据库中
2、update():更新数据库中的java对象
3、delete():把java对象从数据库中删除
4、find():从数据库中查询java对象
5、load()和get():它们都是根据给定的OID从数据库中加载一个对象
get
与load
区别说明:
1、
get
不支持lazy
,load
支持lazy
(延迟加载or
懒加载);
2、
get
在调用时,会立刻发出sql
语句,而load
在调用时,不会发出sql
语句,只有真正使用这个对象的时候才会发出sql
语句;
3、
采用get
加载数据时,当数据库中没有与之对应的数据时,返回null
,而采用load
方法加载数据时,当数据库中,没有与之对应的数据时,会抛出异常;
分享到:
相关推荐
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...
本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、删除状态和游离状态。处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 ...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
Struts2.3.8、Hibernate4.2和Spring3.2是Java开发中的三大主流框架,它们分别负责Web层、持久层和业务层的管理,而Lucene 3.6.2则是一个强大的全文搜索引擎库。这个整合版本称为SSH整合1.0版,旨在提供一个高效、...
11.1.2 JSF框架的请求处理生命周期 201 11.1.3 JSF应用程序结构 202 11.2 MyEclipse创建基于JSF框架的项目 202 11.2.1 创建JSF项目 202 11.2.2 JSF配置文件编辑器 203 11.2.3 创建Managed Bean 204 11.2.4 创建JSP...
IoC容器管理对象的生命周期和依赖关系,而AOP则提供了一种模块化和解耦代码的方式,使得我们可以编写出更加灵活的代码。 2. **spring-context-3.2.0.RELEASE.jar**:扩展了Spring Core,提供了与企业服务的集成,如...