目录
一、Hibernate是什么
Hibernate是一个开源的ORM框架,它对JDBC进行了轻量级的对象封装,使得java可以使用面向对象思维来操作数据库;简单理解,就是Hibernate使用ORM机制,把传统的关系数据库的操作,转换为面向对象的操作,以前对数据库的操作时通过封装好的sql直接调用jdbc接口来完成,即jdbc必须把sql传递到db
二、使用Hibernate操作数据库的步骤
(1)读取并解析配置文件
Configuration conf = new Configuration().configure();
(2)读取并解析映射信息,创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
(3)打开Session
Session session = sf.openSession();
(4)开始一个事务(增删改操作必须,查询操作可选)
Transaction tx = session.beginTransaction();
(5)数据库操作
session.save(user);//或其它操作
(6)提交事务(回滚事务)
tx.commit();(tx.rollback();)
(7)关闭session
session.close();
三、SessionFactory
Configuration的实例会根据当前的配置信息,构造SessionFactory实例。SessionFactory是线程安全的(SessionFactory是工厂模式),一般情况下一个应用中一个数据库共享一个SessionFactory实例。
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
sessionfactory,就是用来创建session会话(具体接下来讲)的工厂。想想有一个特别大的工厂,专门用来在你需要使用session的时候,让它帮你创建一个就好了。
SessionFactory的两种创建方式:
1.从XML文件读取配置信息构建SessionFactory;
2.从Java属性文件读取配置信息构建SessionFactory
四、Session
这里的Session不同于HttpSession(会话Session),它与传统意思上web层的HttpSession并没有关系,Hibernate Session之与Hibernate,相当于JDBC Connection相对与JDBC。
Hibernate的Session是用来表示应用程序和数据库的一次交互(会话),在这个Session中,包含一般的持久化方法CRUD,不是线程安全的,通常每个session实例和一个数据库事务绑定,即每执行一次数据库事务,都要先创建一个新的session实例,在使用session后,需要关闭session释放资源。
Session对象是有生命周期的,它以Transaction对象的事务开始和结束边界。
注意:SessionFactory是线程安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session实例。而Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取,则将会导致Session 数据存取逻辑混乱
Session有以下的特点
1,不是线程安全的,应该避免多个线程共享同一个Session实例
2,Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源
3,Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。