Hibernate补充学习-01

创建Configuration类的实例,通过它来读取解析配置文件,创建SessionFactory读取解析映射文件信息,并将Configuration对象中的所有配置信息拷贝到SessionFactory内存中.接下来打开Session,让SessionFactory提供连接,通过Transaction tx = session.beginTransaction()来开启事务.创建对象,向对象中添加数据,通过session.save()方法完成向数据库保存数据操作,最后提交事务tx.commit(),关闭资源

Configuration:配置对象
Configuration实例主要用于启动,加载,管理hibernate的配置文件信息.在启动Hibernate的过程中,Configuration实例首先确定配置文件的位置,然后读取相关配置,最后创一个 唯一 的SessionFactory实例.Configuration对象 只存在 与系统的初始化阶段,将SessionFactory创建完成后就完成了自己的使命.
Configuration config = new Configuration.configure()默认读取src下的配置文件,如果自定义需要将路径写在configure()中.
使用properties文件作为核心配置文件时,Configuration对象可以加载映射文件configuraton.addResource()

SessionFactory:Session工厂对象
负责Hibernate的初始化和建立Session对象,起到一个缓冲区作用,Hibernate可以将自动生成的SQL语句,映射数据以及某些可重复利用的数据放在这个缓冲区中.同时它还保存了对数据配置的所有映射关系,维护了当前的二级缓存.
特点:线程安全,同一个实例能够供多个线程共享.重量级,不能随意创建和销毁它的实例.
实际项目使用中通常会抽取出一个HibernateUtils的工具类来提供Session对象

public class HibernateUtils {
	private static SessionFactory sf;
	
	static{
		//1 创建,调用空参构造
		Configuration conf = new Configuration().configure();
		//2 根据配置信息,创建 SessionFactory对象
		 sf = conf.buildSessionFactory();
	}
	
	//获得session => 获得全新session
	public static Session openSession(){
				//3 获得session
				Session session = sf.openSession();
				
				return session;
		
	}
	//获得session => 获得与线程绑定的session
	public static Session getCurrentSession(){
		//3 获得session
		Session session = sf.getCurrentSession();
		
		return session;
	}
	public static void main(String[] args) {
		System.out.println(HibernateUtils.openSession());
	}
	
}

Session:
Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,它的主要功能是为持久化对象提供创建,读取和删除的能力,所有持久化对象必须在session的管理下才可以进行持久化操作
创建SessionFactory实例后,有两种方式获得Session实例,第一是通过openSession(),第二是通过getCurrentSession()
区别:openSession获取时,SessionFactory直接创建一个新的Session实例,并且在使用完成后需要调用close方法手动关闭,而getCurrentSession方法创建的Session实例会被绑定到当前线程中,它在提交或回滚操作时会自动关闭.
Session是线程不安全的,多个并发线程同时操作一个Session实例是,可能导致Session数据存取混乱(方法内部定义和使用Session时,不会出现线程问题).应避免多个线程共享一个Session实例.同时它是轻量级的,实例的创建和销毁不需要消耗太多资源,它还有一个缓存,即Hibernate的一级缓存,主要用于存放当前工作单元加载的对象.
Session提供了大量常用方法,如:
增加,修改对象:save(),update(),saveOrUpdate()
删除对象:delete()
根据主键查询:get(),load()
用于数据库操作对象:createQuery(),createSQLQuery
条件查询:createCriteria()

 

Transaction:
主要用于管理事务,它是Hibernate的数据库事务接口,对底层的事务接口进行了封装.Transaction接口的事务对象是通过Session对象开启的
Session执行完数据库操作后,要使用Transaction的commit()方法进行事务提交,才能真正将数据操作同步到数据库中,发生异常时,需要使用rollback()方法进行事务回滚,以避免数据发生错误.如果没有开启事务,每个Session的操作,都相当于一个独立的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值