Hibernate

原创 2015年07月07日 09:29:54

        Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

        

Hibernate的核心组件
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
a)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
b)SessionFactory接口:产生Session实例工厂。
c)Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
d)Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
e)Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。

Persistent Object
持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。JavaBeans在Hibernate中存在三种状态:
1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。
2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)
3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached Object),可以被应用程序的任何层自由使用,例如可以做与表示层打交道的数据舆对象(Data Transfer Object)。

 

Hibernate的运行过程
Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。

Hibernate的运行过程如下图:

配置

@Entity
@Table(name="t_group")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Group {
private int id;
private String name;

private Set<User> users = new HashSet<User>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy = "group")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JSONField(serialize=false)
@JoinColumn(name="groupId")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}

相关属性

inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联由对方控制。


菜鸟学习Hibernate——简单的一个例子

一、Hibernate开发。 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类。 为了能够使用Hibernate快速上手,我们先讲解一个简单的Hibernate应用实例hiberna...
  • gwblue
  • gwblue
  • 2014年04月18日 14:56
  • 9324

Hibernate学习笔记(二)——创建一个简单的Hibernate项目

首先来看看Hibernate开发的一个简单流程: (1)准备开发环境,创建Hibernate项目。 (2)在数据库中创建数据表。 (3)创建持久化类。 (4)设计映射文件,使用Hibernate映射文...
  • fxdaniel
  • fxdaniel
  • 2015年01月05日 12:29
  • 5035

Hibernate - 中文乱码

在 database 和 table 都是 utf8 编码的前提下, 在 hibernate.cfg.xml 的 结点中加入 utf8...
  • SCNU_Jiechao
  • SCNU_Jiechao
  • 2014年12月26日 13:34
  • 1336

hibernate存取图片实例

一般网站在处理用户上传图片时通常采用两种策略:一是直接把图片存入数据库中的Blob字段;二是数据库中只存储图片的在服务器上的路径信息 ,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面...
  • killme2008
  • killme2008
  • 2006年08月07日 00:37
  • 3483

Hibernate自学详细笔记

Hibernate详细自学笔记,初学者快来看看吧!!!!
  • wangyang1354
  • wangyang1354
  • 2015年08月31日 21:23
  • 1274

hibernate运行机制

使用hibernate也有段时间了,以前都没有写相关的学习记录,最近面试被问到相关问题,现在有点空按个人的理解回头总结一下hibernate的运行机制,当做是一种复习吧。 Hibernate运行机制:...
  • FlywindMouse
  • FlywindMouse
  • 2013年11月12日 14:23
  • 9591

Hibernate框架基础——映射普通属性

持久化对象与OID对持久化对象的要求 提供一个无参的构造器。使Hibernate可以使用Constructor.newInstance()来实例化持久化类。 提供一个标识属性(identifier p...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月05日 18:09
  • 1508

Hibernate重点知识笔记-必看

1.关于mappedBy?    1、mappedBy 含义    -- 拥有方能够自动维护跟被拥有方的关系    2、mappedBy标签一定是定义在 the owned side(被拥...
  • he90227
  • he90227
  • 2014年08月22日 11:51
  • 2294

Hibernate核心原理解析

1.核心类加载配置文件 1.创建SessionFactory  Configuration接口的作用是对Hibernate进行配置 以及对他进行启动 在Hibernate的启动过程中 Co...
  • he90227
  • he90227
  • 2015年12月14日 20:29
  • 5176

Hibernate (八)一对一 (外键关联方式)

一对一方式:IdCard.javapublic class IdCard { private Integer id; private String number; privat...
  • zhanglinlang
  • zhanglinlang
  • 2017年03月05日 20:39
  • 888
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate
举报原因:
原因补充:

(最多只允许输入30个字)