hibernate学习小结
2013-07-21 20:14
295 查看
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( )方法
⑤、Query与Criteria接口
1.5 hibernate实体对象的三种状态
瞬时状态:刚用new语句创建,还未被持久化,且不处于session缓存中。
持久状态:已被持久化,且位于session缓存中。
游离状态:已被持久化,但不再处于session缓存中。
持久态和游离态的异同:
同:都有数据库的一行与之对应
异:持久态在session在缓存中,而游离态不在。
①、session的get()或load()方法,可直接获得一个持久态对象。不同的是,get()方法可立即加载对象,load()方法延迟加载对象。
②、通过save或save 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>
1、name为属性名,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>
代码解析:
1、set集合节点适用于配置一对多关联关系, name属性指定one的一端对应属性名。
2、外键列列名。
3、class属性指定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.
四、HQL和Criteria
HQL是面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念。
4.1 使用HQL需要四步
①、得到Session ②、编写HQL语句 ③、创建query ④、执行查询,得到结果
4.2 HQl的基本语法
①、where字句,指定限制条件,与SQL指定比较操作符的指定条件相同。如:>、=、between、in、is等。通过and、or等逻辑连接符组合各逻辑表达式。
②、投影,投影的结果是:默认情况下是对象数组的集合。
③、参数绑定的两种方式:利用定位参数和命名参数。
4.3 Criteria
Criteria是条件附加的容器
Criteria criteria = session.createCriteria(**.class) ,无任何附加条件,查询实体类的所有实例。
刚学了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( )方法
⑤、Query与Criteria接口
1.5 hibernate实体对象的三种状态
瞬时状态:刚用new语句创建,还未被持久化,且不处于session缓存中。
持久状态:已被持久化,且位于session缓存中。
游离状态:已被持久化,但不再处于session缓存中。
持久态和游离态的异同:
同:都有数据库的一行与之对应
异:持久态在session在缓存中,而游离态不在。
①、session的get()或load()方法,可直接获得一个持久态对象。不同的是,get()方法可立即加载对象,load()方法延迟加载对象。
②、通过save或save 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>
1、name为属性名,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>
代码解析:
1、set集合节点适用于配置一对多关联关系, name属性指定one的一端对应属性名。
2、外键列列名。
3、class属性指定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.
四、HQL和Criteria
HQL是面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念。
4.1 使用HQL需要四步
①、得到Session ②、编写HQL语句 ③、创建query ④、执行查询,得到结果
4.2 HQl的基本语法
①、where字句,指定限制条件,与SQL指定比较操作符的指定条件相同。如:>、=、between、in、is等。通过and、or等逻辑连接符组合各逻辑表达式。
②、投影,投影的结果是:默认情况下是对象数组的集合。
③、参数绑定的两种方式:利用定位参数和命名参数。
4.3 Criteria
Criteria是条件附加的容器
Criteria criteria = session.createCriteria(**.class) ,无任何附加条件,查询实体类的所有实例。
相关文章推荐
- JPA+Hibernate 3.3 学习小结——第一个JPA程序
- Hibernate 学习小结
- hibernate一对多关联映射学习小结
- hibernate 深入学习 小结
- Hibernate学习小结
- Hibernate 学习小结
- Hibernate学习小结
- JAVA菜鸟 Hibernate学习小结
- hibernate学习小结
- Hibernate学习小结(一)――Hibernate配置
- Hibernate 学习小结
- hibernate学习小结---hibernate的关联关系映射(Association Mappings)
- [学习小结]Hibernate的Helloworld
- Hibernate学习小结(二)――Hibernate正向工程hbm2ddl
- Hibernate入门篇<1>hibernate.cfg.xml学习小结
- Hibernate学习小结
- Hibernate学习小结之实体对象之间关系
- [学习小结]Hibernate 的几种映射及映射关系
- hibernate学习小结
- Hibernate 学习笔记3 inverse和 cascade