Hibnate-Session

1. 介绍

代表Hibernate应用程序和数据库之间的一次会话,作用相当于JDBC中的Connection


  1. Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存更新删除加载Java对象的方法。
  2. 每一个Session对象都在内存中维护了一个缓存,位于缓存中的对象称为持久化对象,它和数据库表中的相关记录保持着一种对应关系。通过Session缓存,Hibernate最大限度的减少了应用程序访问数据库的次数,实现了对内存空间更加有效的利用。
  3. Hibernate把持久化类的对象分为4种状态:持久化状态临时状态游离状态删除状态。Session的特定方法能使对象从一个状态转换到另一个状态。
  4. 在应用系统开发过程中,使用缓存往往是提升程序性能的主要手段。在Hibernate中,Session对象维护的是一个线程级的一级缓存,SessionFactory维护了一个进程级别的二级缓存。

2. 好处

  1. 减少访问数据库的次数:两次调用session.get(Student.class,1);方法,仅发送1条SQL语句。原因是第一次使用get()方法加载的Student被缓存到了内存中,第二次调用get()方法直接使用了内存中缓存的Student对象,从而减少了访问数据库的次数
  2. 将内存中数据的变化自动同步到数据库中:使用session.get(Student.class,1);方法将一个Student对象加载到内存中后,Student对象就处于Session对象的管理中。此时调用student.setStuName(“a”);方法将触发Hibernate对数据库表中对应数据记录的修改,即发送一条UPDATE语句,更新Student对象在数据库表中对应的记录。
  3. Hibernate最大的特点就是将对数据库记录的操作,转换为对Java对象的操作简化开发

3. SessionFactory

  1. SessionFactory 相当于java web连接池,用于管理所有session
  2. 获得SessionFactory 方式:config.buildSessionFactory();
  3. sessionFactory 还用于缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
  4. SessionFactory线程安全,多个线程同时访问时,不会出现线程并发访问问题。

4. 获取session

//1.获取核心 配置文件对象,默认是加载src的hibernate.cfg.xm文件
Configuration cfg = new Configuration().configure();

//2.创建会话工厂
SessionFactory factory = cfg.buildSessionFactory();

//获取一个全新的session
factory.openSession() 
// 获取一个与当前线程绑定的session
factory.getCurrentSession() 

要使用这个方法必须在hibernate.cfg.xml中配置

<property name="hibernate.current_session_context_class">thread</property>

hibernate支持,将创建的session绑定到本地线程中,底层使用ThreadLocal,在程序之间共享session。

如果提交或者回滚事务,底层将自动关闭session

public class HibernateUtils {
  private static SessionFactory sf;
  
  static{
   //1.加载配置
   Configuration cfg = new Configuration().configure();
   
   //2.创建一个sessionFactory
   sf = cfg.buildSessionFactory();
   
   //3.在虚拟机关闭时,释放SessionFactory
   Runtime.getRuntime().addShutdownHook(new Thread(){
     @Override
     public void run() {
       sf.close();
       System.out.println("释放资源");
     }
   });
   
  }
  
  public static Session openSession(){
   return sf.openSession();
  }
  
  public static Session getCurrentSession(){
   return sf.getCurrentSession();
  }
}

5. 缓存

在应用系统开发过程中,使用缓存往往是提升程序性能的主要手段。在Hibernate中,Session对象维护的是一个线程级的一级缓存,SessionFactory维护了一个进程级别的二级缓存。

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate是一个Java持久化框架,它提供了一种对象关系映射(ORM)的解决方案,用于将Java对象与关系型数据库进行映射和交互。 Hibernate的主要目标是简化数据库相关操作,提供一种面向对象的方式来处理数据持久化。它允许开发人员使用面向对象的方式来操作数据库,而无需编写复杂的SQL查询和数据库操作代码。 Hibernate的核心功能包括: 1. 对象关系映射(ORM):Hibernate通过映射Java类和数据库表之间的关系,实现对象与数据库之间的转换。它将Java对象持久化到数据库中,并从数据库中检索数据,使开发人员可以使用面向对象的方式来操作数据。 2. 数据库操作:Hibernate提供了一套丰富的API和查询语言(HQL、Criteria查询),用于执行各种数据库操作,例如插入、更新、删除和查询数据。 3. 缓存管理:Hibernate提供了一个缓存机制,用于缓存从数据库中检索的数据,以提高应用程序的性能。通过缓存,Hibernate可以避免频繁地访问数据库,从而提高响应速度和减少数据库负载。 4. 事务管理:Hibernate支持事务管理,可以确保在数据库操作中的一系列操作要么全部成功提交,要么全部回滚,以保持数据的一致性和完整性。 Hibernate具有广泛的应用领域,在企业级Java应用程序开发中得到了广泛的应用。它简化了数据库操作的复杂性,提高了开发效率,并提供了灵活和可扩展的数据访问解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值