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相关资源

  • 2017年11月20日 16:33
  • 63.04MB
  • 下载

hibernate级联关系

  • 2017年11月13日 23:03
  • 1.51MB
  • 下载

对Hibernate的简单认识

这段时间学完了Hibernate,深深的感受到用Hibernate这样的框架可以给开发带来很多好处,框架轻松的解决了不少问题。Hibernate能有哪些好处呢?   Hibernate是一个轻量级的O...
  • xqf309
  • xqf309
  • 2013年12月17日 21:12
  • 2043

hibernate通用dao

  • 2017年11月08日 15:54
  • 3KB
  • 下载

配置hibernate根据实体类自动建表功能

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步。 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码update   ...
  • lixuyuan
  • lixuyuan
  • 2012年10月10日 16:42
  • 79724

Hibernate4.1.1的Demo实例

  • 2017年11月01日 17:43
  • 16.03MB
  • 下载

Spring mvc hibernate spring 开发所需jar包

  • 2017年10月26日 09:11
  • 57.06MB
  • 下载

Hibernate之双向一对多关系总结

双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side)。在关系被维护端需要通过@JoinColumn建立外键列指向关系维护端的主键列。其中默认invers...
  • liangoo7
  • liangoo7
  • 2012年10月14日 17:57
  • 10665

hibernate-release-5.2.3.Final

  • 2017年10月25日 10:50
  • 235.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate
举报原因:
原因补充:

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