笔记来自网络整合
一.Hibernate的6个核心接口
1.Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。
2.SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。
3.Session接口:负责保存、更新、删除、加载和查询对象。
4.Transaction接口:管理事务。
5.Query和Criteria接口:执行数据库查询。
二.接口关系图
接口关系图三.接口作用
1.Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
Configuration常用操作函数
(1)加载Hibernate配置文件
Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");
或者
Configuration cfg=new Configuration().configure("/etc/hibernate.properties");
(2)为Configuration指定映射文件
cfg.addResource("test/User.hbm.xml");
(3)为Configuration指定POJO类,Order.hbm.xml根Order.java一个目录
cfg.addClass(test.Order.class);
(4)为Configuration指定Hibernate配置属性,当然我们加载了配置文件就不能使用这个方法了。
Configuration cfg = new
Configuration()
.addClass(test.User.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
.setProperty("hibernate.order_updates", "true");
(5)获得SessionFactory
SessionFactory sessions = cfg.buildSessionFactory();
2.一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。
SessionFactory有以下特点:
它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。
它是重量级的,这意味着不能随意创建或销毁它的实例。
SessionFactory不是轻量级的对象,它包含与指定数据连接各种配置信息,是个线程安全的全局对象,只需要被实例化一次。我们不应该在应用程序中多次实例化它。
3.Session接口是我们最常用的一个接口,是一个轻量级的类,创建和销毁它并不会占用很多资源。请注意,Session对象是非线程安全的,因此在你的设计中,最好一个线程只创建一个Session对象。
Session关系的三种状态:
Transient(自由/临时状态):不曾进行持久化,数据库中没记录,也就是说没有与Session发生过关联。
Persistent(持久状态):持久的实例在数据库中有对应的记录,并且在Session的缓存中。
Detached(游离状态):持久的实例在数据库中有对应的记录,但不在Session的缓存中。也就是说曾经与Session发生过关联。
session状态图4.Transaction接口是Hibernate的数据库事务接口。它对底层的事务接口做了封装,底层事务接口包括:
JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture)API 。Hibernate应用可通过一致的Transaction接口来声明事务边界,这有助于应用在不同的环境容器中移植。尽管应用也可以绕过Transaction接口,直接访问底层的事务接口,这种方法不值得推荐,因为它不利于应用在不同的环境移植。
一个典型的事务应该使用下面的形式,beginTransaction()到commit()之间的代码处在同一个事务:
beginTransaction()开启事务;
commit()提交事务;
rollback()在发生异常时回滚事务。
5.Query和Criteria接口是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。
Query实例包装了一个HQL查询语句,HQL查询语句和SQL查询语句有些相似,但HQL查询语句是面向对象的,它引用类句及类的属性句,而不是表句及表的字段句。Criteria接口完全封装了基于字符串的查询语句,比Query接口更加面向对象,Criteria接口擅长执行动态查询。Session接口的find()方法也具有数据查询功能,但它只是执行一些简单的HQL查询语句的快捷方法,它的功能远没有Query接口强大。
网友评论