Hibernate
1. Hibernate是java中对象和关系的映射的解决方案,可以将数据库中的一条记录看做一个java对象,大大方便了编程,提高了可维护性。
2. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操作数据库,
hibernate可以应用在任何使用JDBC的场合,既可以在java的客户端程序使用,也可以在servlet/JSP的web应用中使用hibernate的对象关系映射,是非常强大并高性能的,其目标是使开发人员从95%的数据持久化工作中解脱出来
3. 映射定义
(1)对象和关系数据库之间的映射,通常是用一个xml文档来定义的
(2)映射语言是以java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义
(3)业界流行的两种说法
—对象驱动数据:根据对象建模,由对象模型来生成数据模型(数据库表结构)
—数据驱动对象:根据数据建模,由数据模型来生成对象模型
4.什么是ORM
在了解ORM之前,我们先来了解一下什么是持久化技术,持久化技术就是把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘),持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、xml数据文件中等等
1.持久化主要是和数据库打交道的层次,在数据库中对数据的增加、删除、查找和修改都是通过持久化来完成的
2.ORM(Object/Relational Mapping,对象/关系映射)是一种常用的持久化技术。我们所说的对象是指使用的编程语言是面向对象的,关系则是指使用的数据库是关系型数据库。ORM的映射关系如下图
使用ORM之后就不再需要与复杂的SQL语句打交道了,通过创建一个持久化类来映射数据库的一个数据库表,如下图,其中持久化的属性则映射到数据库表中的字段,当使用面向对象的方式来操作持久化对象时,ORM框架能自动将这些操作转化成SQL语句,从而完成对数据库的操作
5.使用ORM,使用它的好处究竟有哪些。
1、大大简化了代码
JDBC编程:代码量大 编写繁琐 容易出错
使用ORM:开发人员可以像操作对象一样来操作数据库,大大降低了代码量
2.将数据库底层透明化
JDBC编程:需了解数据库信息有哪些表,甚至有哪些字段,对程序员要求高
使用ORM:数据库透明化,开发人员只需要根据业务逻辑需求操作JAVA对象,不需要了解数据库信息
3、性能大大优化
JDBC编程 效率低 ;若在表中插入1000条数据要执行1000次sQL语句
使用ORM 自动向后台数据库发送sQL请求,
多次请求可以简化成一次操作,大大降低通信量
6.对象关系映射
对象关系映射(ORMapping),是软件开发过程中,在数据库层比较流行的设计思想。
在了解ORMapping之前,同样要明确一点,ORMapping是一种设计思想,不是一种编程技术
7.上面的SQL语句是在DAO中组织的,只能修改DAO的代码,重新编译部署。
我们可以发现SQL语句的结构是基本不变的,变化的只是表名、列名等,因此,解决该问题的办法是:将表名和列名在配置文件内注册,将表名对应到类,列名对应到类的属性,每当对表内的数据进行操作时,系统实际上从配置文件中读取表名和列名组织SQL语句,在DAO的开发人员看来是对对象进行操作,
如果数据库改变,只需改变配置文件,修改配置文件比修改源代码代价低得多,因此最直观的方法是将数据库中的一条记录看做一个对象,对这个对象的操作就直接影响到数据库内部。
8.
8.
9. 实际上,Student的作用和VO很类似,
在本章中,由于Student一般封装的是数据库中的持久化信息,因此也可以叫做PO(PersistenceObject),有些文献中,也叫POJO(Plain Ordinary Java Object,不含业务逻辑代码的普通Java对象)
10.在ORMapping中,一个PO对象,一般表示数据表中的一条记录,只是对这个记录的操作可以简化成对这个Bean对象的操作,操作之后数据库中的记录相应变化;框架必须提供一些能够对这些对象进行操作的函数
ORMapping思想给数据库层的操作带来了巨大的好处,但是,ORMapping毕竟只是一 种思想,不同的程序员编写出来的基于ORMapping思想的应用,风格可能不一样。影响程序的标准化。因此,有必要对ORMapping模式来进行标准化,让程序员在某个标准下进行 开发
11.ORMapping是Hibernate框架的基础,或者说,Hibernate是为了规范ORMapping开发而发布的一个框架。
类似的框架还有很多,如:iBATIS、Entity Bean等,而iBATIS框架并没有真正实现ORM框架,而EJB3是重量级开发框架,不适合轻量级开发。
12.hibernate框架是一个完整的持久层解决方案,通过hibernate的支持,可以使用面向对象方式进行各种数据库操作,从而取代传统的JDBC数据库操作。
13.hibernate的优势:
hibernate是免费的、开放源代码的
hibernate是轻量级开发,实现O/R映射简单
hibernate可扩展强而且拥有众多的社区支持
14
Hibernate中,常用的的组件有PO、框架API、Hibernate配置文件、Hibernate映射文件等,他们之间的关系如图
15 对于一个数据库操作,其执行步骤为:
(1)框架API通过读取Hibernate配置文件,连接到数据库
(2)当对PO进行操作时,框架API通过Hibernate映射文件,来决定操作的表名和列名
(3)框架API执行SQL语句
16 利用Hibernate编程,有以下几个步骤:
(1)编写Hibernate配置文件,连接到数据库
(2)编写PO
(3)编写Hibernate映射文件,将PO和表映射,PO中的属性和表中的列映射
(4)编写DAO,使用Hibernate进行数据库操作
17.开发hibernate程序的基本步骤
创建会话工厂类
在使用hibernate操作数据类型时,需要得到一个session对象,通过调用session对象的方法,才能完成数据库操作,如添加记录。删除记录等。这个HibernateSessionFactory.java也是由系统自动生成的
创建实体类
实体类用来映射数据库中的一张数据库表,实体类中的属性与数据库表中的字段相对应。持久化类是一个POJO类(简单的java对象),不用继承和实现任何类或接口
创建对象关系映射文件
关系映射文件用来映射持久化类和数据库表,从而将持久化类的属性和数据库表中的字段联系起来。
完成插入数据
如果需要使用hibernate来插入数据,需要调用session对象的save方法。sava方法接受一个Object类型的参数,该参数为一个封装了所有插入数据的对象
18 Hibernate框架的基本使用方法
1.开始编写这个项目,用myeclipse新建一个普通的java项目:Prj13
2.导入Hibernate框架
选中的项目,在MyEclipse菜单栏中找到:MyEclipse——Project Capabilities——Add Hibernate Capabilities
3.编写Hibernate配置文件
Hibernate配置文件名为:hibernate.cfg.xml,一般不要修改名称,并放在src目录下,该文件的主要目的是为了连接到数据库,
打开hibernate.cfg.xml源代码,将代码改为
4.编写PO
前面所做的内容只是把数据库连接的基本消息写在配置文件里,
接下来要把T_STUDENT表和一个类对应起来。
具体操作为:建立一个名为po的包,在po包里新建一个类,用来对应数据库T_STUDENT表中的记录
5.编写并配置映射文件
编写完这个类之后,系统还是无法识别Student类和数据库表的关系。因此,要编写第2个配置文件,配置文件可以随意命名,但此处将其命名为Student.hbm.xml,这样让开发者一看就知道这是Hibernate的映射文件,此文件一般和po放在一个包下
主要编写格式为:
(1) <class name=“类名”table=“表名”>:类和表对应,类名就是之前创建的Student类;表名就是Student类所对应的T_STUDENT
(2) Id
—在数据库中通过主键唯一标识一条记录
—通过ORM将数据库中的一条记录映射为一个java对象
—被映射的类必须定义对应数据库表主键字段
—大多数类有一个javabean风格的属性,为每一个实例包含唯一的标识
—<id>元素定义了该属性到数据库表主键字段的映射
<id name="属性" column="列名">:填写主键,即使表内没有主键,配置文件中也要配置一个唯一标识。这里分别填写Student类里的account和T_STUDENT表中的ACCOUNT属性
(3) <generator class="assigned"/>:主键的生成策略,assigned表示由用户赋值。其他生成策略,后面会进行详细的介绍
(4)<property name=“属性”column=“列名”/>。将属性和列对应起来
6.配置到这里,系统无法识别这个映射文件,还需将此文件路径在 hibernate.cfg.xml文件中注册,使得系统能正确识别此文件。
操作方法为:打开hibernate.cfg.xml,
将“<mapping resource=”po/Student.hbm.xml“/>”加到hibernate.cfg.xml中
2015 javaEE 彭傲员 郭克华 中南大学