接口可以近似地分为如下几类:
由应用调用以完成基本的CRUD和查询操作的接口。这些接口是应用的业务/控制逻辑对Hibernate的主要的依赖点。它们包括Session,Transaction和Query。
由应用的底层代码调用以配置Hibernate的接口,最重要的是Configuration类。
允许应用对Hibernate内部出现的事件进行处理的回调接口,例如Interceptor,Lifecycle和Validatable接口。
允许对Hibernate强大的映射功能进行扩展的接口, 例如UserType ,CompositeUserType和IdentifierGenerator。这些接口由应用的底层代码实现(如果需要的话)。
Configuration
正如其名,Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要
获取一些底层实现的基本信息,其中几个关键属性包括:
1、数据库URL
2、数据库用户
3、数据库用户密码
4、数据库JDBC驱动类
1、 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。
当然,还有指定Hibernate映射文件的位置。(*.hbm.xml)。
Hibernate配置有两种方法:
一、 属性文件配置。默认文件名是hibernate.properties。调用代码:
Configuration config = new Configuration();
二、 XML文件配置。默认文件名是hibernate.cfg.xml。
Configuration config = new Configuration().configure();
SessionFactory:应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它打算在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。
会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。它也保存了在一个工作单元中读入的数据并且可能在以后的工作单元中被重用(只有类和集合映射指定了使用这种二级缓存时才会如此)。
SessionFactory sessionFactory = config.buildSessionFactory();
Session(会话):该接口是Hibernate使用最多的接口。Session不是线程安全的,它代表与数据库之间的一次操作。Session通过SessionFactory打开,在所有的工作完成后,需要关闭:它的概念介于Connection和Transaction之间。我们可以简单的认为它是已经装载对象的缓存或集合的一个独立工作单元。我们有时也称Session为持久化管理器,因为它是与持久化有关的操作的接口。
Hibernate会话并不是线程安全的因此应该被设计为每次只能在一个线程中使用。Hibernate会话与Web层的HttpSession没有任何关系。
Session session = sessionFactory.openSession();
Transaction:事务将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。
Transaction trans = session.beginTransaction ();
Query: Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。
Query query = session.createQuery(“from User”);
Lifecycle:Lifecycle接口提供了一些回调方法,可以让持久化对象在save或load之后,或者在delete或update之前进行必要的初始化与清除步骤。
public interface Lifecycle {
public boolean onSave(Session s) throws CallbackException; (1)
public boolean onUpdate(Session s) throws CallbackException; (2)
public boolean onDelete(Session s) throws CallbackException; (3)
public void onLoad(Session s, Serializable id); (4)
}
(1) onSave - 在对象即将被save或者insert的时候回调
(2) onUpdate - 在对象即将被update的时候回调(也就是对象被传递给Session.update()的时候)
(3) onDelete - 在对象即将被delete(删除)的时候回调
(4) onLoad - 在对象刚刚被load(装载)后的时候回调
Validatable: 该接口是合法性检查的回调。如果持久化类需要在保存其持久化状态前进行合法性检查,它可以实现下面的接口:
public interface Validatable {
public void validate() throws ValidationFailure;
}
如果发现对象违反了某条规则,应该抛出一个ValidationFailure异常。在Validatable实例的validate()方法内部不应该改变它的状态。
和Lifecycle接口的回调方法不同,validate()可能在任何时间被调用。应用程序不应该把validate()调用和商业功能联系起来。
Interceptor: Interceptor接口提供从session到你的应用程序的回调方法,让你的程序可以观察和在持久化对象保存/更改/删除或者装载的时候操作它的属性。一种可能的用途是
用来监视统计信息。比如,下面的Interceptor会自动在一个Auditable创建的时候设置其createTimestamp,并且当它被更改的时候,设置其lastUpdateTimestamp属性。
UserType: 开发者创建属于他们自己的值类型也是很容易的。比如说,你可能希望持久化java.lang.BigInteger类型的属性,持久化成为VARCHAR字段。Hibernate没有内置这样一种类型。自定义类型能够映射一个属性(或集合元素)到不止一个数据库表字段。比如说,你可能有这样的Java属性:getName()/setName(),这是java.lang.String类型的,对应的持久化到三个字段:FIRST_NAME, INITIAL, SURNAME。 要实现一个自定义类型,可以实现net.sf.hibernate.UserType或net.sf.hibernate.CompositeUserType中的任一个,并且使用类型的Java全限定类名来声明属性。请查看net.sf.hibernate.test.DoubleStringType这个例子,看看它是怎么做的。
<property name="twoStrings" type="net.sf.hibernate.test.DoubleStringType">
<column name="first_string"/>
<column name="second_string"/>
</property>
注意使用<column>标签来把一个属性映射到多个字段的做法。
[color=blue][/color]
分享到:
相关推荐
在本教程中,我们将深入探讨Hibernate的核心开发接口,这些接口是Hibernate框架的基石,使得开发者能够轻松地与数据库进行交互。Hibernate是一个强大的Java对象关系映射(ORM)框架,它消除了传统SQL编程的繁琐,...
"hibernate 通用接口架构"是指利用Hibernate框架,通过设计DAO(Data Access Object)层的接口来实现业务逻辑与数据访问的解耦,从而提高代码的可复用性和可维护性。 首先,我们来理解DAO层的作用。DAO层作为业务...
API文档则是关于Hibernate接口和类的详细说明,是开发过程中不可或缺的参考资料。 API(Application Programming Interface)部分,是开发者直接与Hibernate框架交互的接口。例如,`org.hibernate.Session`接口代表...
"Hibernate核心接口" Hibernate 是一种流行的 Java 持久化框架,它提供了多种核心接口来实现数据的持久化操作。这些核心接口是 Hibernate 的基础组件,任何 Hibernate 应用程序都需要使用它们。下面将详细介绍这五...
- 数据库(如Oracle)用于存储数据,Hibernate映射文件定义对象与表的对应关系,JavaBean表示业务实体,DBOperator使用Hibernate接口与数据库交互,Struts2处理HTTP请求,协调各层工作。 总结来说,Hibernate通过...
2.2.4 切换到Hibernate接口 2.3 反向工程遗留数据库 2.3.1 创建数据库配置 2.3.2 定制反向工程 2.3.3 生成Java源代码 2.4 与Java EE服务整合 2.4.1 与JTA整合 2.4.2 JNDI绑定的...
6. Hibernate接口分类:主要包括用于数据库操作的Session、Transaction和Query接口,配置Hibernate的Configuration接口,事件监听接口如Interceptor,以及扩展Hibernate功能的UserType等接口。 7. 技术集成:...
- 持久化层(Data Access Layer):包括领域模型业务对象、Hibernate映射文件、Hibernate接口以及DAO模式。 #### 1.2. 持久层实现模式 持久层有多种实现方式,例如: - 混杂模式:在业务类中直接混杂JDBC代码,简单...
- CRUD操作的示例代码,展示如何通过Hibernate接口与数据库进行交互。 - 查询相关的代码,如HQL或Criteria查询。 通过这些源码,学习者可以深入了解Hibernate的工作原理,以及如何在实际项目中应用Hibernate进行...
在 Hibernate 中,数据库访问接口的设计是至关重要的,因为它提供了与数据库交互的桥梁,简化了传统的 JDBC 编程,提高了开发效率和代码的可维护性。 ### 1. Session 接口 Hibernate 的核心接口是 `Session`,它...
### Hibernate中的五个核心接口 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互过程。通过将 Java 对象映射到数据库表中,Hibernate 提供了一种更加...
"Hibernate曾删改查接口实现"这个主题,主要涉及的是如何利用Hibernate的核心接口进行数据的增、删、改、查操作。下面将详细讲解这些知识点。 **1. Hibernate基本概念** Hibernate是一个开源的ORM框架,它的核心是...
Hibernate的五个核心接口 Configuration SessionFactory Session Transcation Query和Criteria
JPA、ORM和Hibernate之间的关系是:ORM是一种思想,JPA是这种思想的具体表现形式,即按照Java语法规范定义的一套标准接口,Hibernate则是这组接口的一个具体实现。 Hibernate框架的下载和配置也是Java开发人员必须...
基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...
这个压缩包文件"CXF接口Spring+Hibernate的添加完整版"提供了将这三个技术整合在一起的一个示例,特别关注了如何实现一个基于CXF的接口,并结合Spring和Hibernate来完成数据的添加操作。以下是对这些知识点的详细...
这就是"封装Hibernate统一操作接口"的目的。 一、 Hibernate概述 Hibernate是一个开源的ORM框架,它将Java对象与关系数据库中的记录进行映射,从而避免了传统的JDBC编程的繁琐。通过Hibernate,开发者可以使用面向...
`hibernate-jpa-2.1-api-1.0.0.Final.jar`是Java Persistence API (JPA) 2.1的实现,JPA是Java EE平台的一部分,提供了一种规范化的ORM接口,与Hibernate等ORM框架进行交互。这个库通常与Hibernate一起使用,以实现...
这个`hibernate3.zip`压缩包包含了`hibernate3.jar`,它是Hibernate 3版本的核心库,包含了执行ORM(对象关系映射)所需的所有类和接口。 在Java开发中,Hibernate3主要提供了以下关键知识点: 1. **对象关系映射...