Hibernate学习笔记--核心编程

参考资料:Java Web核心框架

http://blog.csdn.net/lsh6688/article/details/7611950

补充:ThreadLocal的使用:http://www.cnblogs.com/gnivor/p/4440776.html

Part 1.hibernate核心接口层次架构关系

Hibernate学习笔记--核心编程

图:hibernate核心接口层次架构关系

上图中,Hibernate的接口大致可以分为以下几种类型:

1. 基本操作类:一些被用户的应用程序调用的,用来完成基本的创建、读取、更新、删除操作以及查询操作的接口。这些接口是Hibernate实现用户程序的商业逻辑的主要接口,它们包括Session、Transaction和Query。

2. 配置类:Hibernate用来读取诸如映射表这类配置文件的接口,典型的代表有Configuration类。

3. 回调(Callback)接口:它允许应用程序能对一些事件的发生作出相应的操作,例如Interceptor、Lifecycle和Validatable都是这一类接口。

4. 一些可以用来扩展Hibernate的映射机制的接口:例如UserType、CompositeUserType和IdentifierGenerator。这些接口可由用户程序来实现(如果有必要)。

  Hibernate使用了J2EE架构中的如下技术:JDBC、JTA、JNDI。其中JDBC是一个支持关系数据库操作的一个基础层;它与JNDI和JTA一起结合,使得Hibernate可以方便地集成到J2EE应用服务器中去。

Part 2.常用核心接口及相互关系

常用核心接口有6个:Session、SessionFactory、Configuration、Transaction、Query、Criteria

Hibernate学习笔记--核心编程

图:接口类的产生关系

Session接口:

Session接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session 的开销太大,会给系统带来不良影响。但是Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。 session可以看作介于数据连接与事务管理一种中间接口。我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作, 诸如存储持久对象至数据库,以及从数据库从获得它们。需要注意的是,Hibernate的session不同于JSP 应用中的HttpSession。当我们使用session这个术语时,我们指的Hibernate 中的session,而我们以后会将HttpSesion 对象称为用户session。

SessionFactory接口:

SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

Transaction接口:

Transaction接口负责事务相关的操作,一般在Hibernate的增删改中出现,但是使用Hibernate的人一般使用Spring去管理事务。

Query和Criteria接口:

Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。它的返回值一般是List。需要自己转换。

Configuration接口:

Configuration对象用于配置并启动Hibernate。Hibernate应用通过Configuration实例来指定对象—关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。在Hibernate启动过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory实例。我们可以查看Configuration的源代码,它的configure()方法是这样实现的:

public Configuration configure() throwsHibernateException {
configure("/hibernate.cfg.xml" );//此处指定了ORM文件的位置
return this;
}
上一篇:20192319 2020-2021-1 《数据结构与面向对象程序设计》实验八报告


下一篇:如何向VS2010中插入ActiveX控件并且附带相应的类