Hibernate常用接口
Hibernate的接口类型
在了解了Hibernate的基本配置,映射文件后,道路已经铺平了。我们继续往前走。接下来,我们应该做的是了解Hibernate常用的接口,对Hibernate的工作方式进一步熟悉,为我们下一步的编码做好充分的准备。
ORM是复杂的,可以看看Hibernate发布里的javadoc,100+MB。如果我们单单去阅读它的API,估计一年你才能看完。然而,我们仅仅是使用他,并不需要对它了解的十分完全。我们只需要了解它的常用核心类和接口就行了。就像数据库是非常复杂的,然而我们仅仅是使用它,又不需要关心它的底层实现,建表还是很easy的。
同样Hibernate在设计的时候,也考虑到广大使用者,因此它的API接口设计还是相对简单的。Hibernate的接口大致可以分为以下几种类型:
基本操作类:用来完成对数据库增、删、改、查的接口。例如:Session、Transaction和Query;
配置类:Hibernate用例读取配置文件和映射文件的接口。例如:SessionFactory、Configuration;
回调接口:它允许应用程序能对一些事件的发生作出相应的操作。例如:Interceptor、Validatable;
扩展映射机制接口:UserType、CompositeUserType、IdentifierGenerator
Hibernate六个常用接口
Hibernate的类非常多,但我们常用的也就六个,分别是:
Configuration、SessionFactory、Session、Transaction、Query、Criteria。这六个核心接口是我们必须了解和掌握的。通过这六个接口,我们可以完成对数据的基本操作,包括增、删、改、查,还有事务控制。
这六个接口之间的产生关系如下:

Configuration类
org.hibernate.cfg.Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先读取Hibernate配置文件,加载配置信息,然后加载映射文件,创建一个SessionFactory对象。
实例被设计成启动期间(startup-time)对象,一旦SessionFactory 创建完成它就被丢弃了。
要使用一个Configuration对象,要为它设置两个方面的内容:
- 数据库连接属性
- hbm.xml或pojo类
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();
当所有映射定义被 Configuration 解析后,应用程序必须获得一个用于构造org.hibernate.Session 实例的工厂SessionFactory。这个工厂将被应用程序的所有线程共享,线程安全的全局对象,只需要被实例化一次。单例模式。
Hibernate 允许你的应用程序创建多个SessionFactory 实例。这对使用多个数据库的应用来说很有用。
SessionFactory接口
Hibernate 的SessionFactory是一个关联于特定数据库全局的工厂(factory)。如果你要使用多个数据库,就要用多个的SessionFactory,通常把它们放在多个配置文件(Hibernate.cfg.xml)中(为了更容易启动)。
SessionFactory不是轻量级的对象,它包含与指定数据连接各种配置信息,是个线程安全的全局对象,只需要被实例化一次。我们不应该在应用程序中多次实例化它。
Session接口
Session接口是我们最常用的一个接口。但Session是一个轻量级的类,创建和销毁它并不会占用很多资源。请注意,Session对象是非线程安全的,因此在你的设计中,最好一个线程只创建一个Session对象。
Session主要用来管理对数据库进行的操作,包括开启一个事务、存取对象、执行查询。一般可以将Session看成一个对象的缓冲区或持久层管理器,当持久对象被Session管理后,Hibernate在事务提交时能够自动检测缓冲区的持久化对象是否已经改变,也就是说持久化对象所携带的信息是否发生了改变(脏数据检查),然后与数据库进行同步操作。
对象的三种状态,其实这里指对象与Session关系的三种状态:
Transient(自由状态):不曾进行持久化,数据库中没记录,也就是说没有与Session发生过关联。
Persistent(持久状态):持久的实例在数据库中有对应的记录,并且在Session的缓存中。
Detached(游离状态):持久的实例在数据库中有对应的记录,但不在Session的缓存中。也就是说曾经与Session发生过关联。
三种状态的转化:

这让我想到了一个恰当的比喻:对象和Session的关系就像我们与大学的关系:
自由状态是我们没上大学;
持久状态是我们已经被录取,并且在就读;
游离状态是我们已经毕业了,飞走了,但你依然是你母校的学生!
当然,你可以选择再次深造!
Transaction接口
这个API是可选的,我们可以选择使用该类来添加事务支持。它是对实际事务实现的一个抽象,这些实现包括JDBC事务、JTA中的UserTransaction、甚至是CORBA事务。之所以这样设计,是为了开发者能够使用一个统一的事务操作界面,是的自己的项目可以在不同的环境和容器之间方便的移植。
一个典型的事务应该使用下面的形式,beginTransaction()到commit()之间的代码处在同一个事务:
beginTransaction()开启事务;
commit()提交事务;
rollback()在发生异常时回滚事务。
下面的session使用sessionFactory.openSession()方式取的:
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
tx.commit();
} catch (RuntimeException e) {
if (tx != null)
tx.rollback();
throw e; // or display error message
} finally {
session.close();
}
下面的session使用sessionFactory.getCurrentSession()方式取的:
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
tx.commit();
} catch (RuntimeException e) {
tx.rollback();
throw e; // or display error message
}
Query和Criteria接口
这两个接口负责执行各种查询,它可以使用HQL和SQL语句两种表达方式。由Session创建并执行。
Criteria接口与Query接口非常类似,它允许创建并执行面向对象的标准化查询。
数据库操作中查询是使用最频繁的,是非常重要的一块,我们在以后详细讨论。
Hibernate常用接口的更多相关文章
- Java实战之02Hibernate-01简介、常用接口、CRUD操作
一.Hibernate简介 1.Hibernate在开发中所处的位置 2.ORM映射 Object :面向对象领域的 Relational:关系数据库领域的 Mapping:映射 Object: Re ...
- Hibernate常用API以及使用说明
1===>Hibernate常用的aip有Configuration,SessionFactory,Transaction,Session Configuration主要用于加载配置文件,使用 ...
- Hibernate常用查询语句
Hibernate常用查询语句 Hib的检索方式1'导航对象图检索方式.通过已经加载的对象,调用.iterator()方法可以得到order对象如果是首次执行此方法,Hib会从数据库加载关联的orde ...
- ( 转)Hibernate常用API
http://blog.csdn.net/yerenyuan_pku/article/details/65103203 可在度娘上摘抄如下文字: Hibernate的核心类和接口一共有6个,分别为:S ...
- CSharpGL(2)设计和使用场景元素及常用接口
CSharpGL(2)设计和使用场景元素及常用接口 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- Servlet API遍程常用接口和类
本文主要总结Servlet API遍程常用接口和类 Servlet API http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html ...
- hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。
hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate. ...
- 液晶常用接口“LVDS、TTL、RSDS、TMDS”技术原理介绍
液晶常用接口“LVDS.TTL.RSDS.TMDS”技术原理介绍 1:Lvds Low-Voltage Differential Signaling 低压差分信号 1994年由美国国家半导体公司提出之 ...
随机推荐
- Windows phone 之常用控件
一.TextBox TextBox 显示和编辑单格式.多行文本的控件 将TextWrapping的特性设置为Wrap会使文本在到达TextBox控件的边缘时换至新行.必要时会自动扩展TextBox以便 ...
- css重置样式表reset.css
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote,/* structural elements 结构元素 */ dl, dt, dd, ul, ol, l ...
- Dictionary通过Value找到它的key
private void GetDicKeyByValue() { Dictionary<string, string> dic = new Dictionary<string, s ...
- 为何要fork()两次来避免产生僵尸进程??
最近安装书上说的,开始搞多进程了..看到了一个好帖子,学习学习 http://blog.sina.com.cn/s/blog_9f1496990100y420.html 首先我们要明白,为什么要避免僵 ...
- double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码
今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:“23.123”--->“23123” + 3 比较简单.就是 ...
- register 不允许 block 模式,而默认的是
Exception in thread "main" java.nio.channels.IllegalBlockingModeException at java.nio.chan ...
- MongoDB update数据语法【转】
在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方 ...
- golang-mongodb范例
package main import ( "log" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) ...
- [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】
题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...
- matlab拟合三维椭球
同学问的,查了下资料. %需要拟合的点的坐标为(0,-174.802,990.048),(0.472,-171.284,995.463),(0.413,-168.639,1003.55 ...