hibernate学习小结

Hibernate学习总结 @爱编程

刚学了hibernate,以下是对hibernate知识的总结,学习—总结—再学习,嘿嘿...加油!

一、hibernate概述

Hibernate是开放源代码对象关系映射框架,对JDBC进行了轻量级的封装,使Java程序员可以使用对象编程思维来操纵数据库。由于JDBC无法直接面向对象、开发效率低、代码冗余的缺点,而hibernate的优势在于能直接面向对象编程,简化了JDBC繁琐的编码,并且能将JavaBean对象和数据库的表建立对应关系。

1.1持久化

Java中的持久化通常指使用SQL将数据存储在关系型数据库中,ORM是持久化的一种解决方案。将对象模型和关系型数据库模型联系起来,并使用元数据对映射描述。三种映射关系分别是:类和表的映射、属性和主键的映射、属性和普通字段的映射。

1.2整个项目前的准备

①、导入jar

②、创建主配置文件

③、测试连接

④、hibernate映射文件

1.3对数据库操作

①、Configuration配置

②、创建SessionFactory

③、打开Session

④、开始一个事务

⑤、持久化操作(增删改查)

⑥、提交事务

⑦、关闭Session

1.4 hibernate五大接口

①、Configuration接口,加载主配置文件。

②、SessionFactory接口,一般情况下,整个应用只有一个。特点:重量级、单实例。

③、Session接口,是hibernate主要接口,拥有操作持久化对象的系列API,被称为“持久化管理器”。

④、Transaction接口,主要定义了commit( )方法和rollback( )方法

⑤、QueryCriteria接口

1.5 hibernate实体对象的三种状态

    瞬时状态:刚用new语句创建,还未被持久化,且不处于session缓存中。

持久状态:已被持久化,且位于session缓存中。

游离状态:已被持久化,但不再处于session缓存中。

持久态和游离态的异同:

同:都有数据库的一行与之对应

异:持久态在session在缓存中,而游离态不在。

①、sessionget()load()方法,可直接获得一个持久态对象。不同的是,get()方法可立即加载对象,load()方法延迟加载对象。

②、通过savesave or update方法将对象从瞬时态转化为持久态,再通过delete方法可将对象变为瞬时态。

③、持久态通过evict()close()clear()等方法可将持久态转化为游离态,而游离态对象也可通过update()save or update()方法重新回到持久态,并在事务提交时和数据库同步。

④、session关闭后,原有的持久态变为游离态。游离态的对象无法获得关联的对象或集合。

特别注意:持久化方法并非立即同步到数据库,在save()方法后添加flush(),延迟加载只在session范围内有效。

1.5 延迟加载

①、Hibernate默认采用延迟加载策略,是为避免一些无谓的性能开销提出的,所谓延迟加载是在真正用到数据的时候才加载数据,即按需加载。

②、主对象的关联对象或关联集合不是立即抓取的,加载对象时他们还是代理,只有当用到他们时才会对他们加载,又称为代理对象的初始化。与延迟加载相对应的是强制热抓取关联数据fetch join,改变默认延迟加载策略。Hibernate还可调用initialze方法强制初始化代理。代理是和session绑定的,如session关了,它没法再去抓数据了。

   ③、加载计划和策略分为以下几类

主对象的关联对象:默认延迟加载

主对象的关联集合:默认延迟加载

主对象本身:用get()方法时立即加载,用load()方法时延迟加载。

主对象属性:默认立即加载

二、关联映射

实体之间通过一个对象持有另一个对象的实例而发生了关联关系,并且类与类之间最普遍的关系也是关联关系。在UML语言中,关联是有对象的。如:

2.1单项多对一关联(many-to-one

Many的一端应持有one一端的对象(引用),映射文件体现多对一。

示例代码如下:

映射文件例:

<hibernate-mapping>

<class name="org.ijob.bean.Resume" table="ijob_resume">

<!—省略主键映射及属性映射 -->

<!-- 多对一关联 -->

<many-to-one name="seeker" class="org.ijob.bean.Seeker">       1

<column name="seeker_id"></column>                   2

</many-to-one>

</class>

</hibernate-mapping>

1name为属性名,class为“one”端类名

2、外键列列名

2.2 单项一对多关联(one-to-many)

One的一端应持有many一端的对象集合,映射文件体现一对多。

示例代码如下:

<!—省略主键映射及属性映射 -->

<set name="resumes" >                                     1           <key column="seeker_id"></key>                            2

<one-to-many class="org.ijob.bean.Resume"/>              3

</set>

</class>

</hibernate-mapping>

代码解析:

1set集合节点适用于配置一对多关联关系, name属性指定one的一端对应属性名。

2、外键列列名。

3class属性指定many端的全限定类名。

2.3双向一对多关联

双向一对多关联,就是同时配置了单项=向一对多和单项多对一关联。

2.4 一对一关联(one-to-one)

一对一关联是特殊的一对多关联,就是many的一端是唯一的而不是多个。

实例代码如下:

book:

<many-to-one name=type" class=**" column=type_id"  unique="true" />

type:

<one-to-one name=book" class=**" property-ref=type" />

2.5 多对多关联(many-to-many)

将多对多转换为两个一对多,为中间表建立实体类及映射文件,两个端点及中间端点分别建立双向一对多关联。

示例代码如下:

如果中间表是联合主键:

<!-- 联合主键 -->

<composite-id>

<!--同时表达这是外键-->

<key-many-to-one name=**” column=***" class=***" ></key-many-to-one>

<key-many-to-one name=**” column=**" class=**" ></key-many-to-one>

</composite-id>

三、Session管理

Java程序的运行起点,要么是主线程,要么是主线程中开启的新线程,同一个线程可以共享Session。在junit测试中,可以在测试方法结束后关闭Session.

四、HQLCriteria

HQL是面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念。

4.1 使用HQL需要四步

①、得到Session ②、编写HQL语句 ③、创建query ④、执行查询,得到结果

4.2 HQl的基本语法

①、where字句,指定限制条件,与SQL指定比较操作符的指定条件相同。如:>=betweeninis等。通过andor等逻辑连接符组合各逻辑表达式。

②、投影,投影的结果是:默认情况下是对象数组的集合。

③、参数绑定的两种方式:利用定位参数和命名参数。

4.3 Criteria

Criteria是条件附加的容器

Criteria criteria = session.createCriteria(**.class) ,无任何附加条件,查询实体类的所有实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值