hibernate ORM 5.2.6 发布了,Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。
Hibernate ORM 5.2.6 发布不到一个月,网上关于Hibernate ORM 5.2.6 的资料甚少,这里我们只能借助官网的介绍来做一个简单的介绍Hibernate ORM Guide
Hibernate领域模型:
作为JPA提供者,Hibernate实现了Java Persistence API规范,并且JPA接口和Hibernate特定实现之间的关联,关系如下:
我们知道,JPA 是通过 JDK5.0 注解或 XML 描述对象 - 关系表的映射关系,并将运行期实体对象持久化到数据库中去。JPA 规范的制定过程中大量参考了 Hibernate 的内容,所以如果一个对 Hibernate 很熟悉的人,使用起来 JPA 会是轻车熟路,驾轻就熟的,并且会感觉到更简单一些,这主要得益于 JDK5 中引入的注解(annotation)。
SessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。往往一个项目只需要一个SessionFactory,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
注:SessionFactory很早就存在了,想2011年做个项目的时候,用大名鼎鼎的ssh框架时候就有了,具体什么版本大家可以自己查找下。
Session
一提起Session,首先想到的是http的session会话,而hibernate中的Session呢,是用来表示,应用程序和数据库的一次会话。我们知道Session的会话是线程不安全的,所以,通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。
Transaction
Transanction接口是Hibernate的数据库事务接口,用于管理事务,他对底层的事务作出了封装,用户可以使用Transanction对象定义自己的对数据库的原子操作,底层事务包括:JDBC API ,JTA(java Transaction API)…一个Transaction对象事务可能会包括多个对数据库进行的操作。使用事务也是为了缓解对数据库的压力。
领域模型
领域建模源自于数据建模,hibernate的领域模型,其实就是所谓的持久化模型。要完成领域建模,需要遵从一些规则。
将业务关注点和横切关注点(事务、日志、安全)进行分离,你的领域模型中不应该包含有与横切关注点相关的代码。
不要与特定的API进行耦合,因为要保证你的领域模型具有足够高的重用性和灵活性,那么就不要跟一些特定的API耦合。
现在有一种比较流行的领域模型——POJO类,这些POJO类只包含了基本的业务数据和对应的存取方法,这样的POJO类就非常符合上述的两种规则。
建立领域模型
领域模型的建模,其实跟E-R图是非常相近的,也是从业务规则中抽取出跟业务相关的实体,理清实体跟实体之间的联系。举一个在线拍卖系统来说,用户拿商品进行拍卖,然后其他用户可以出价,从这里可以抽取出三个实体:用户User、商品Item和出价Bid。
透明和自动持久化
透明指的是,你可以在不知道底层是怎么实现持久化的情况下,底层帮助你进行领域模型的持久化。所谓的自动持久化,就是不需要人为地编写一些SQL语句和调用JDBC的API来完成持久化工作。Hibernate在进行领域模型持久化时就是透明的和自动化的。它根据ORM的映射规则,来自动生成SQL语句并执行。
领域模型的关联
关联有一对一、一对多、多对多关联,在面向对象的Java中,这三种关联都可以很好地表示,一对一关联就是单一类的实体,而一对多多对多关联,包含了多的一方要使用集合,一般情况下,都会选择使用Set集合。
关联在面向对象的Java中,还存在方向,即所谓的单向和双向。选择单向还是双向,根据我们的数据导航计划来选用,比如说一个User有一个UserDetail(说明用户详细信息的实体类),正常情况下,可以由User导航到UserDetail(通过getter方法),一般不需要从UserDetail导航到User,所以此时选择单向的数据导航计划就可以了。
Bootstrap
Bootstrap是一个来自 Twitter,是目前受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。在项目中往往结合其他框架来完成项目的开发。
JPA
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
API
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。