Hibernate的SessionFactory和Session

一 SessionFactory(会话工厂)接口
①缓存sql语句和某些数据(称为session级缓存)。
②在应用程序初始化的时候创建,是一个重量级的类(吃内存),一般用单例模式保证一个应用中只需要一个SessionFactory实例。
③如果某个应用访问多个数据库,则要创建多个会话工厂实例,一般是一个数据库一个会话工厂实例。
④通过SessionFactory接口可以获得Session(会话)实例。

二 示例代码
Configuration cf=new Configuration().configure();
SessionFactory sf=cf.buildSessionFactory();
Session s=sf.getCurrentSession();
//或者是: Session s=sf.openSession();

三 openSession()和getCurrentSession()的区别
1 openSession()获取一个新的session。
2 getCurrentSession()获取和当前线程绑定的session,换言之,在同一个线程中,我们获取的session是同一session,这样可以利于事务控制。
3 如果希望使用getCurrentSession需要配置hibernate.cfg.xml中配置。配置如下。
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
4 选择原则
①如果需要在同一线程中,保证使用同一个Session则,使用getCurrentSession()。
②如果在一个线程中,需要使用不同的Session,则使用opentSession()。
5 通过getCurrentSession()获取的session在事务提交后,会自动关闭,通过openSession()获取的session则必须手动关闭。
6 如果是通过getCurrentSession()获取sesssion,进行查询需要事务提交。

四 本地事务和全局事务的区别

五 如何确定session有没有及时关闭
1 windows操作系统
netstat –an      [oracle 1521 mysql 3306 sql server 1433]
2 linux/unix  
netstat –anp  
top

六 SessionFactory(会话工厂)接口的理解 

七 Session(会话)接口
①Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)。
②Session实例通过SessionFactory获取,用完需要关闭。
③Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSession()。
④Session可以看做是持久化管理器,它是与持久化操作相关的接口。

八 Session(会话)接口的几个重要方法
Session一般以对象的形式来操作
①保存一个对象(记录)—save方法
②删除一个对象(记录)—delete方法
③查询一个对象(记录)—get/load方法
④修改一个对象(记录)—update方法    
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值