Hibernate 的核心接口

作者: 善倾 | 来源:发表于2018-09-09 23:55 被阅读2次

Hibernate 有几个常用的接口,下面会一一介绍。

Configuration 接口

Configuration 接口负责加载核心配置文件到内存中。如果核心配置文件使用的是 .properties 文件,还可以通过它来加载映射文件。通过它可以得到 SessionFactory 对象!使用方式如下:

  • 加载核心配置文件
//加载 hibernate.properties 文件
Configuration cfg = new Configuration();
//加载 hibernate.cfg.xml 文件
Configuration cfg = new COnfiguration().configure();
  • 加载映射文件
cfg.addResource("xxx/xx.hbm.xml");

SessionFactory 接口

一个 SessionFactory 实例对象就对应一个数据库,这是一个重量级对象,它内部有很多个 Map 类型的属性,用来封装配置信息和数据库连接池以及 Hibernate 中的二级缓存,所以如果只有一个数据库,创建一个 SessionFaction 实例对象即可。

由于它具有数据库连接池的特性,所以它肯定要被设计成线程安全的。通过它可以得到 Session 对象!

Session 接口

Session 对象直接和数据库进行 CURD 操作,相当于 JDBC 中的 Connection 对象。它是线程不安全的,关于它常用的方法有以下这些:

  • Serializable save(Object obj),该方法负责把对象纳入 Session 的一级缓存进行管理,也就是会把瞬时态的对象变成持久态。该方法返回的是一个序列化的 id 值。
  • T get(Class c,Serializable id),调用该方法时,它会立即发送 sql 语句进行查询指定 id 的那条纪录,返回对应的 POJO 对象。
  • T load(Class c,Serializable id),调用该方法时,它并不会立即发送 sql 语句,而是返回一个采用了 CGLIB 技术的动态代理对象。也就是 Hibernate 中的懒加载技术!等到真正需要用到该对象的时候,才会去创建真正的实例对象。如果 id 值不对,找不到记录的话,就会抛出一个ObjectNotFoundException异常对象。
  • void update(Object obj),实现修改记录有两种方式:
    • 第一种是必须要先进行查询,再修改对应的属性,最后调用此方法,这才是正确的逻辑。
    • 第二种是直接创建对象,指定 id 值,最后调用该方法。这种方法的前提是需要知道 id 值,而且它会一次性更改所有属性,也就是说,如果创建的对象有 null 值,数据库中对应的记录也会被修改成 null 。不推荐使用,而且也不合理啊,不通过查询,怎么会知道 id 值呢?
  • void delete(Object obj),实现删除记录也有两种方式:
    • 第一种是先查询,再修改对应的属性,然后再删除。推荐使用这种方式,因为这种删除方式属于级联删除。什么是级联删除呢?如果要删除一个用户记录,那么关于它的订单记录也就没有必要存储了,一并删除就好,这就属于级联删除。
    • 第二种是先创建对象,指定 id 值,再删除,这种只会删除此对象对应的记录,不会进行级联删除。如果有指定的业务需求,也可以使用这种方式。
  • void saveOrUpdate(Object obj),此方法会根据有无 id 值,动态选择进行更改或保存。有 id 值就进行更改,没有 id 值就进行保存数据。
  • Query createQuery(String hql),该方法返回一个 Query 对象,参数接受的是使用面向对下思想的 Hibernate Query Language 。使用方式如下:
Query q = session.createQuery("from Customer");
List<Customer> list = q.list();
  • Query createSQLQuery(String sql),该方法返回一个 Query 对象,参数接收的是 sql 语句,可见 Hibernate 也是可以直接编写 sql 语句的。而且此方法返回的 List 集合的元素是一个Object[]数组对象,使用方式如下:
SQLQuery q = session.createSQLQuery("select * from cust_customer");
List<Object[]> list = q.list();

Transaction 接口

这是 Hibernate 中进行事务管理的对象,如果用到 Spring 的话,这个工作会交给 Spring 完成。它的核心方法只有两个,分别是:

  • commit(),提交事务
  • rollback(),出现了问题,进行回滚

相关文章

网友评论

    本文标题:Hibernate 的核心接口

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