创建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的操作,都相当于一个独立的操作