Hibernate的核心接口
Configuration 接口
配置Hibernate,根据其启动hibernate,创建 SessionFactory 对象;
Configuration用于配置加载类,用于加载主配置,ORM数据加载,直接调用空参构造函数进行创建。
使用空参的函数configure()来加载src下名字为hibernate.cfg.xml的主配置文件,配置文件的名字大小写都不能有错。
Configuration conf = new Configuration().configure(); //默认加载类的根路径src下名为hibernate.cfg.xml的配置文件
SessionFactory 接口
初始化Hibernate,充当数据存储源的代理,创建session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存;
SessionFactory是用于创建操作数据库核心对象session对象的工厂。
注意:1.sessionFactory负责保存和使用所有的配置信息,定义sql语句的CRUD,消耗内存资源非常大
2.sessionFactory属于线程安全的对象设计。
结论:一个应用应该只有一个SessionFactory,在应用加载时创建,应用卸载时销毁。
SessionFactory sf = conf.buildSessionFactory();
Session 接口
Session session = sf.openSession() //打开一个新的session对象
负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存;
功能:表达hibernate与数据库之间的连接,而且还可以完成数据库中数据的增删改查。
使用原则:一个线程只能有一个Session对象。
调用session里面不同的方法实现crud操作
- 添加:save方法
- 修改:update方法
- 删除:delete方法
- 根据id查询:get方法
Transaction 接口:管理事务
session.getTransaction().begin(); //开启事务
session.getTransaction().commit(); //提交事务
Query和Criteria 接口:执行数据库的查询。
关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析
(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)
Hibernate4版本的SessionFactory实例构建的步骤是这样的
Configuration就是代表着hibernate的那个xml配置文件对象,如果configure方法中没有参数的话,默认是就是hibernate.cfg.xml。
Configuration conf = new Configuration().configure();
选择Hibernate.cfg.xml
Configuration conf = new Configuration().configure(“/Hibernate.cfg.xml”);
服务注册,这是使用创建者模式,根据配置文件中的配置字段来构建注册服务(这应该是hibernate架构中注册服务的通用流程)。
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
使用实例化好了的注册服务,使用Configuration中的工厂模式实例化了SessionFactory
SessionFactory sf = conf.buildSessionFactory(serviceRegistry);
如果你用的是Hibernate4的版本,这样做完全OK的,运行的时候不会报MappingException。
但是如果你使用Hibernate5的版本,就会报错。
那么Hibernate5应该怎样构建SessionFactory呢,如下:
和4版本比,5版本看不到configure对象了。直接使用创建者模式构建出了标准服务注册对象
1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
在configure(“cfg/hibernate.cfg.xml”)方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure(“cfg/hibernate.cfg.xml”).build();
2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
Hibernate工作原理
- 读取并解析配置文件
- 读取并解析映射信息,创建SessionFactory
- 打开Session
- 创建事务Transation
- 持久化操作
- 提交事务
- 关闭Session
- 关闭SesstionFactory