Hibernate学习笔记--核心编程

参考资料:Java Web核心框架

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

Part 1.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

图:接口类的产生关系

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;
}
时间: 2024-10-21 12:58:57

Hibernate学习笔记--核心编程的相关文章

jsp/servlet学习笔记(核心编程)servlet部分

功用:1.读取客户端显示数据2.赌气浏览器隐式请求数据3.生成结果4.向客户发送显示数据(文档)5.发送隐式HTTP相应数据 1.效率:传统CGI对每一个请求都会启动一个进程 servlet使用轻量级的java线程处理2.便利 3.强大 4.廉价 5.可移植 6.安全 jsp作用某种程度上,servlet看作是含有html的java程序将jsp看作是含有java代码的html页面jsp会翻译成servlet,servlet会被编译,在请求期间运行的就是servlet Web目录html以及jsp

jsp/servlet学习笔记(核心编程)jsp部分

jspjsp最终需要转换成servelt,并进行编译,在请求期间实际上是编译的servlet jsp擅长生成大量组织有序的结构化HTML或其他字符数据组成的页面.servlet擅长生成为进制数据,构建数据多样的页面,以及执行输出很少或者没有输出的任务(重定向) 1.jsp仅在修改后第一次访问时才会转换成servlet并进行编译:2.载入到内存中初始化和执行遵循servlet的一般规则 基本语法:第十一章<%...%> jsp调用动态代码策略1.直接调用(使用及少量代码)2.简介调用java代码

jsp/servlet学习笔记(核心编程)mysql部分

第十七章 访问JDBC(1)载入JDBC驱动程序需要在Class.forName方法中指定数据库驱动程序的类型try{ Class.forName("connect.jdbc.driver.OracleDriver");}catch(ClassNotFountException){ System.err.println("");} (2)定义链接URL(指定协议,主机名.端口和数据库名)String host="dbhost.yourcompany.com

Linux程序设计学习笔记----网络通信编程API及其示例应用

转载请注明出处, http://blog.csdn.net/suool/article/details/38702855. BSD Socket 网络通信编程 BSD TCP 通信编程流程 图为面向连接的Socket通信的双方执行函数流程.使用TCP协议的通信双方实现数据通信的基本流程如下 建立连接的步骤 1.首先服务器端需要以下工作: (1)调用socket()函数,建立Socket对象,指定通信协议. (2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口

python &nbsp; 学习笔记 (核心)

python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[0],x[-1]指最后一个字符,x[2:4]取子串, '''hello''' #hello三引号会保留文本输入时的换行符制表符等不需要转义,用于多行原样输入保存 'hello'+'world' #字符串拼接,'hello'*2 #字符串重复 help(fun) #帮助,help(module.met

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节是对ufldl学习笔记与编程作业:Softmax Regression(softmax回归)版本的改进. 哈哈,把向量化的写法给写出来了,尼玛好快啊.只需要2分钟,2

ufldl学习笔记与编程作业:Logistic Regression(逻辑回归)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/ 有了线性回归的基础再来学

ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其它机器学习的算法,能够直接来学dl. 于是近期就開始搞这个了.教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutoria