业务层 -> dao -> orm -> 数据库
2、 sessionfactory
-- org.hibernate
该类用于创建 sessions,通常应用程序中拥有唯一的一个 sessionfractory 实例,为客户端请求服
注:瞬态实体对象可以通过 session 实例调用 save(),persist()或saveupdate() 方法被持久化。持
save()/persist() --> sql 中的 insert 语句
delete() --> sql 中的 delete 语句
update/merge --> sql 中的 update
saveorupdate()/ replicate() --> sql 中的 insert 或 update
如果持久态的对象是序列化(serializable)的,那么 session 的实例也是序列化的。
当 session 发生异常的时候,事务必须回滚而且释放 session 所占用的资源。
如下操作:
---------------------------------------------
session sess = factory.opensession();
transaction tx;
try {
tx = sess.begintransaction();
//do some work
...
tx.commit();
}
catch (exception e) {
object load(class theclass, serializable id)
-> 如果实体类存在的化,就返回指定 id 实体类的持久化对象。
通过dao来实现java对象的持久化操作,而orm(object-relational mapping)组件用来实现java对象
与数据库中数据之间的转换,具备数据库的 _连
接管理_
事务管理_ 及 _
对象的缓冲管理_ 等功能。
1、
configuration
-- org.hibernate.cfg.configuration
该类允许应用程序指定属性和映射在创建 sessionfactory 对象时的文档文件(.cfg.xml)。通常应
-- org.hibernate.cfg.configuration
该类允许应用程序指定属性和映射在创建 sessionfactory 对象时的文档文件(.cfg.xml)。通常应
用程。序会创建一个 configuration 对象和一个 sessionfractory 的实例,在不同的线程中初始化
sessions 来为用户请求服务。
configuration
configure()
-> 用在应用程序源文件(hibernate.cfg.xml)中指定的映射和属性。
注:给此方法加参数可以指定要解析的 xml 文件。参数可以是 string、url、file。
-> 用在应用程序源文件(hibernate.cfg.xml)中指定的映射和属性。
注:给此方法加参数可以指定要解析的 xml 文件。参数可以是 string、url、file。
sessionfactory
buildsessionfactory()
-> 用给定的映射和属性实例化 sessionfactory 的对象并将实例返回。
-> 用给定的映射和属性实例化 sessionfactory 的对象并将实例返回。
2、 sessionfactory
-- org.hibernate
该类用于创建 sessions,通常应用程序中拥有唯一的一个 sessionfractory 实例,为客户端请求服
务的线程能够在 sessionfractory 的实例中获得 sessions。
void close()
-> 销毁创建的 sessionfractory 实例并释放所有资源(缓存、连接池等)。
void close()
-> 销毁创建的 sessionfractory 实例并释放所有资源(缓存、连接池等)。
session
opensession()
-> 创建数据库连接并打开会话。
-> 创建数据库连接并打开会话。
3、
session
-- org.hibernate
java 应用程序 和 hibernate 之间主要运行时接口。抽象持久化服务概念的中核心 api 接口。 session 的生命周期与逻辑事务的开始和结束绑定。
-- org.hibernate
java 应用程序 和 hibernate 之间主要运行时接口。抽象持久化服务概念的中核心 api 接口。 session 的生命周期与逻辑事务的开始和结束绑定。
类的主要作用是为与数据库像映射的实体类对象提供
增、删、查、改的操作。一个实体对象在生命周期的任一时刻都存在与下面的三种状态:
transient(瞬时态) 永远不持久化,与 session 无任何关系。
persistent(持久态) 与 一个 session 相关。
detached(游离态) 只是先前的持久化,不再与 session 相关联。
transient(瞬时态) 永远不持久化,与 session 无任何关系。
persistent(持久态) 与 一个 session 相关。
detached(游离态) 只是先前的持久化,不再与 session 相关联。
如:
// 瞬态
// 创建一个瞬态对象,当前对象与数据库无任何关系,没有做任何持久化的操作
student stu = new student();
// 瞬态
// 创建一个瞬态对象,当前对象与数据库无任何关系,没有做任何持久化的操作
student stu = new student();
//
持久态
//创建一个瞬态对象
student stu = new student();
//创建一个瞬态对象
student stu = new student();
session session = factory.opensession();
transaction trans = session.begintransaction();
// 此时 stu 是一个瞬态对象
session.save(stu);
//此时, stu 对象已被纳入到hibernate实体管理容器中,转变为 持久态
trans.commit();
transaction trans = session.begintransaction();
// 此时 stu 是一个瞬态对象
session.save(stu);
//此时, stu 对象已被纳入到hibernate实体管理容器中,转变为 持久态
trans.commit();
transaction tx2=session.begintransaction();
stu.setpassword(“aaa”);
tx2.commit();
// user对象处于持久态,这个事务 虽未调用save()方法保存该对
// 象,但对user对象的任何修改都会被持久化到数据库,密码被改为“aaa”。
session.close();
// 当 session 实例调用 close() 方法时,stu 对象成为 游离态的
stu.setpassword(“aaa”);
tx2.commit();
// user对象处于持久态,这个事务 虽未调用save()方法保存该对
// 象,但对user对象的任何修改都会被持久化到数据库,密码被改为“aaa”。
session.close();
// 当 session 实例调用 close() 方法时,stu 对象成为 游离态的
注:瞬态实体对象可以通过 session 实例调用 save(),persist()或saveupdate() 方法被持久化。持
久态实体象可以通过 session 实例调用 delete() 方法成为瞬时态。session 实例通过调用 get()
或 load() 方法返回任一实体对象是持久化的。游离态实体对象可以通过 session 实例调用 update
(),saveorupdate(),lock 或 replicate() 方法被持久化。瞬时态实体对象和游离态实体对象可以通
过 session 实例调用 merge() 方法被持久化,成为持久态的对象。
save()/persist() --> sql 中的 insert 语句
delete() --> sql 中的 delete 语句
update/merge --> sql 中的 update
saveorupdate()/ replicate() --> sql 中的 insert 或 update
如果持久态的对象是序列化(serializable)的,那么 session 的实例也是序列化的。
当 session 发生异常的时候,事务必须回滚而且释放 session 所占用的资源。
如下操作:
---------------------------------------------
session sess = factory.opensession();
transaction tx;
try {
tx = sess.begintransaction();
//do some work
...
tx.commit();
}
catch (exception e) {
// 回滚事务
if (tx!=null) tx.rollback();
throw e;
}
finally {
if (tx!=null) tx.rollback();
throw e;
}
finally {
// 关闭 session,释放 session 占用的所有资源
sess.close();
}
---------------------------------------------
sess.close();
}
---------------------------------------------
connection
close()
-> 通过与数据库断开连接和清理缓存来结束 session。要结束 session,close() 方法不是必须的,你也可以通过 disconnect() 方法实现。
-> 通过与数据库断开连接和清理缓存来结束 session。要结束 session,close() 方法不是必须的,你也可以通过 disconnect() 方法实现。
object
get(class clazz, serializable id)
-> 返回指定 id 实体类的持久化对象。如果该对象或对象的代理,已经与 session 相关联,则返回
-> 返回指定 id 实体类的持久化对象。如果该对象或对象的代理,已经与 session 相关联,则返回
哪个对象或代理。
object load(class theclass, serializable id)
-> 如果实体类存在的化,就返回指定 id 实体类的持久化对象。
注:hibernate对于load方法认为该数据在
数据库中一定存在,可以放心的使用
代理来延迟加载,如果
在使用过程中发现了问题,只能抛异常;而对于get方法,
hibernate一定要获取到真实的数据,否则
返回null。
serializable
save(object object)
-> 将给定的瞬时态实体对象持久化,如果生成器用的是 assigned,第一次次要指定一个生成的标识
-> 将给定的瞬时态实体对象持久化,如果生成器用的是 assigned,第一次次要指定一个生成的标识
。
4、
transaction
-- org.hibernate
允许应用程序完成一系列的任务。
-- org.hibernate
允许应用程序完成一系列的任务。
通过 session.begintransaction() 来实例化。
void
commit()
-> 先调用 flush() 方法清空缓存,然后结束事务。
-> 先调用 flush() 方法清空缓存,然后结束事务。
5、
query
-- org.hibernate
hibernate 的查询接口。
-- org.hibernate
hibernate 的查询接口。
通过 session.createquery() 来获得类的实例。
list
list()
iterator iterate()
scrollableresults scroll()
-> 执行查询并返回查询结果。
iterator iterate()
scrollableresults scroll()
-> 执行查询并返回查询结果。