美文网首页技术干货Java 杂谈
【Hibernate】二、核心接口

【Hibernate】二、核心接口

作者: 苏枼 | 来源:发表于2017-12-26 22:14 被阅读47次

笔记来自网络整合

一.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接口强大。

相关文章

网友评论

    本文标题:【Hibernate】二、核心接口

    本文链接:https://www.haomeiwen.com/subject/qeaegxtx.html