hibernate知识点梳理

一、 对象持久化的理论

1.对象持久化:内存中的对象转存到外部持久设备上,在需要的时候还可以恢复。

2.对象持久化的原因(目标):

物理:

1) 内存不能持久,需要在硬盘上持久保存 //(物理上,物理的都不是根本原因)

2) 内存容量有限,需要在容量更大的硬盘上保存

应用:

3) 共享(Internet的本质:信息的收集、整理、发布) //最重要的原因

4) 检索(大规模) //也很重要

5) 管理(备份、安全)

3.怎样进行对象持久化?(仅从JAVA方面讲)

物理:

1) 对象序列化

2) DB技术(JDBC 数据库)

4.怎样利用数据库做对象持久化?

1) JDBC

优点:功能完备、理论上效率高

缺点:复杂(难)、代码量大、面向R(过程;二维表关系)

2) EJB 仅讲Entity Bean

优点:封装JDBC

缺点:更复杂的API、重量级(侵入式)、功能不完备、难共享

缺点的后果:开发周期长、测试困难、面向过程

以上是 2.0之前的版本,但 3.0跟Hibernate基本一样

3) ORM 轻量级框架(Hibernate)

现阶段最佳的持久化工具:文档齐全、服务很好、工业标准、大量应用、易学

优点:封装JBDC、简单的API、轻量级(只做持久化)(用类库)、PO(持久对象)->POJO(纯JAVA)、开源

缺点:不够JDBC灵活

5.结论:

1)对象持久化是必须的

2)必须使用DB来实现

3)Hibernate必须的(现阶段最佳选择)

开源工具的通常问题:1.文档不全;2.服务不全;3.标准化不够

而Hibernate避免了所有这些问题

 

二、 ORM和Hibernate的相关知识(理解)

1) ORM:Object Relational Mapping

对象-关系映射实现了面向对象世界中对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。

2) Hibernate是非常优秀、成熟的O/R Mapping框架。它提供了强大的对象和关系数据库映射以及查询功能。

规范:

1.一个映射文件对应一个持久类(一一对应)

2.映射文件的名字和它所描述的持久类的名字保持一致

3.映射文件应该与它所描述的类在同一包中

po -> (pojo)

-> oid(唯一,中性)

-> getters/setters

-> 构造方法

三、Hibernate核心API(理解)

Configuration类:

Configuration对象用于配置和启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。

SessionFactory接口:

一个SessionFactory实例对应一个数据存储源。应用从SessionFactory中获取Session实例。

1)它是线程安全的,这意味着它的一个实例能够被应用的多个线程共享。

2)它是重量级的,这意味着不能随意创建或者销毁,一个数据库只对应一个SessionFactory。

通常构建SessionFactory是在某对象Bean的静态初始化代码块中进行。

如果应用只是访问一个数据库,只需创建一个SessionFactory实例,并且在应用初始化的时候创建该实例。

如果应用有同时访问多个数据库,则需为每个数据库创建一个单独的SessionFactory。

Session接口:

是Hibernate应用最广泛的接口。它提供了和持久化相关的操作,如添加,删除,更改,加载和查询对象。

1)它是线程不安全的,因此在设计软件架构时,应尽量避免多个线程共享一个Session实例。

2)Session实例是轻量级的,这意味着在程序可以经常创建和销毁Session对象,

例如为每个客户请求分配单独的Session实例。

原则:一个线程一个Session;一个事务一个Session。

Transaction接口:

是Hibernate的事务处理接口,它对底层的事务接口进行封装。

Query和Criteria接口:

这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。

Query实例包装了一个HQL查询语句。

Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象。Criteria更擅长于执行动态查询。

补充:find方法也提供数据查询功能,但只是执行一些简单的HQL查询语句的快捷方式(已过时),远没有Query接口强大!

四、Hibernate开发步骤:(重点:必须掌握)

开始:(设置环境变量和配置)

在myeclipse里导入Hibernate的文件包(包括各数据库的驱动和其他的jar包,对版本敏感,注意各版本的兼容)

按hibernate规范编写名字为hibernate.cfg.xml文件(默认放在工程文件夹下)

步骤一:设计和建立数据库表

可以用Hibernate直接生成映射表。

Oracle里建表: create table t_ad (oid number(15) primary key,

ACTNO varchar(20) not null unique,BALANCE number(20));

步骤二:持久化类的设计

POJO---- POJO 在Hibernate 语义中理解为数据库表所对应的Domain Object。(此类中只含有属性、构造方法、get/set方法)

这里的POJO就是所谓的“Plain Ordinary Java Object”,字面上来讲就是无格式普通Java 对象, 简单的可以理解为一个不包含逻辑代码的值对象(Value Object 简称VO)。

步骤三:持久化类和关系数据库的映射

编写*.hbm.xml文件---该文件配置持久化类和数据库表之间的映射关系

<class name=“POJO的类全路径” table=“对应的库表名” //这两项一定要配置,其它的都可以不配置 

discriminator-value=“discriminator_value” //区分不同子类的值,多态时使用。默认与类名一样

dynamic-update=“true | false” //是否动态更新SQL。false:每次都更新所有属性;true:只更新修改的

dynamic-insert=“true | false” //是否动态插入SQL。false:每次都插入所有属性;true:只插入非空的

select-before-update=“true | false” //是否在update前查询对象是否被修改过,修改过才update

polymorphism=“implicit | explicit” //设置多态是显性(explicit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值