Configuration 配置对象.
Configuration主要用于Hibernate框架加载核心配置文件和映射文件.
//这种写法会去src下读取hibernate.cfg.xml文件.默认写法
Configuration conf = new Configuration().configure();
//如果不想使用默认的配置文件,也可以使用指定目录下的配置文件
Configuration conf = new Configuration().configure("文件位置");
SessionFactory Session工厂对象
SessionFactory接口负责Hibernate的初始化和建立Session对象.它在Hibernate中起到一个缓冲区的作用,Hibernate可以将自动生成的SQL语句\映射数据以及某些可以重复利用的数据放在这个缓冲区中.同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存.
SessionFactory是通过Configuration对象获取的,起获取方法如下:
SessionFactory sessionFactory = config.buildSessionFactory();
SessionFactory有以下特点:
- 它是线程安全的,它的同一个实例能够多个线程共享.
- 它是重量级的,不能随意的创建和销毁它的实例.
由于SessionFactory的特点,一般情况下,一个项目中只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每个数据源简历一个SessionFactory实例.
Session
Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,它的主要功能是为持久化对象提供创建\读取和删除的能力,所有持久化对象必须在session的管理下才可以进行持久化操作.
Session的获取方式及区别
创建SessionFactory实例后,就可以通过它来获取Session的实例.获取Session实例有两种方式,一种是通过openSession()方法,另一种是通过getCurrentSession()方法.代码如下:
Session session = sessionFactory.openSession();
Session session = sessionFactory.getCurrentSession();
使用openSession方法获取Session实例时,SessionFactory直接创建一个新的Session实例,并且在使用完成后需要调用close方法进行手动关闭.而getCurrentSession方法创建的Session实例会被绑定到当前线程中,它在提交或回滚操作时会自动关闭.
Session是线程不安全的,多个并发线程同事操作一个Session实例时,就可能导致Session数据存取的混乱(方法内部定义和使用时,不会出现线程安全问题).因此设计软件架构时,应避免多个线程贡献改一个Session实例.同时它是轻量级的,创建和销毁不需要消耗太多的资源.它还有一个缓存,即Hibernate一级缓存,这个缓存主要用于存放当前工作单元加载的对象.
Session中的常用方法
- save() update() 和 saveOrUpdate()方法: 用于增加和修改对象.
- delete()方法: 用于删除对象.
- get() 和 load()方法: 根据主键查询.
- create() 和 createSqlQuery()方法: 用于数据库操作对象.
- createCriteria()方法: 条件查询.