一些 hibernate 所用接口的简要说明

业务层 -> dao -> orm -> 数据库
 
通过dao来实现java对象的持久化操作,而orm(object-relational mapping)组件用来实现java对象
与数据库中数据之间的转换,具备数据库的 _连 接管理_ 事务管理_ 及 _ 对象的缓冲管理_ 等功能。
 
1、 configuration
-- org.hibernate.cfg.configuration
该类允许应用程序指定属性和映射在创建 sessionfactory 对象时的文档文件(.cfg.xml)。通常应
用程。序会创建一个 configuration 对象和一个 sessionfractory 的实例,在不同的线程中初始化
sessions 来为用户请求服务。
 
configuration configure()  
-> 用在应用程序源文件(hibernate.cfg.xml)中指定的映射和属性。
注:给此方法加参数可以指定要解析的 xml 文件。参数可以是 string、url、file
sessionfactory buildsessionfactory() 
-> 用给定的映射和属性实例化 sessionfactory 的对象并将实例返回。

2、 sessionfactory
-- org.hibernate
该类用于创建 sessions,通常应用程序中拥有唯一的一个 sessionfractory 实例,为客户端请求服
务的线程能够在 sessionfractory 的实例中获得 sessions。
 
void close() 
-> 销毁创建的 sessionfractory 实例并释放所有资源(缓存、连接池等)。
 
session opensession() 
-> 创建数据库连接并打开会话。
 
3、 session
-- org.hibernate
java 应用程序 和 hibernate 之间主要运行时接口。抽象持久化服务概念的中核心 api 接口。 session 的生命周期与逻辑事务的开始和结束绑定。
 
类的主要作用是为与数据库像映射的实体类对象提供 增、删、查、改的操作。一个实体对象在生命周期的任一时刻都存在与下面的三种状态:
   transient(瞬时态) 永远不持久化,与 session 无任何关系。
   persistent(持久态) 与 一个 session 相关。
   detached(游离态) 只是先前的持久化,不再与 session 相关联。
如:
// 瞬态
// 创建一个瞬态对象,当前对象与数据库无任何关系,没有做任何持久化的操作
  student stu = new student();

  stu.setname("小乐");
  stu.setpassword("201314");
  stu.sete_mail(" lele@21.cn");
 
// 持久态
//创建一个瞬态对象
  student stu = new student();
 
  stu.setname("小乐");
  stu.setpassword("201314");
  stu.sete_mail(" lele@21.cn");
 
  session session = factory.opensession();
  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 对象成为 游离态
  
注:瞬态实体对象可以通过 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 {
     // 关闭 session,释放 session 占用的所有资源
     sess.close();
 }
---------------------------------------------
 
connection close()
-> 通过与数据库断开连接和清理缓存来结束 session。要结束 session,close() 方法不是必须的,你也可以通过 disconnect() 方法实现。
 
object get(class clazz, serializable id) 
-> 返回指定 id 实体类的持久化对象。如果该对象或对象的代理,已经与 session 相关联,则返回
哪个对象或代理。

object load(class theclass, serializable id) 
-> 如果实体类存在的化,就返回指定 id 实体类的持久化对象。
 
注:hibernate对于load方法认为该数据在 数据库中一定存在,可以放心的使用 代理来延迟加载,如果
在使用过程中发现了问题,只能抛异常;而对于get方法, hibernate一定要获取到真实的数据,否则
返回null。
 
serializable save(object object) 
-> 将给定的瞬时态实体对象持久化,如果生成器用的是 assigned,第一次次要指定一个生成的标识
4、 transaction
-- org.hibernate
允许应用程序完成一系列的任务。
通过 session.begintransaction() 来实例化。
 
void commit()
-> 先调用 flush() 方法清空缓存,然后结束事务。
 
5、 query
-- org.hibernate
hibernate 的查询接口。
通过 session.createquery() 来获得类的实例。
 
list list() 
 iterator iterate()
  scrollableresults scroll() 
-> 执行查询并返回查询结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值