Hibernate(Control)

案例:http://blog.csdn.net/jiuqiyuliang/article/details/39380465

对象关系映射框架,它对JDBC进行了轻量级的对象封装,可以使用对象编程思维来操纵数据库,实现对象持久化和事务控制。

Hibernate框架

核心类和接口

  Session接口

    非线程安全,负责执行被持久化对象的CRUD操作

    save()    临时对象->持久化对象

  Session Factory接口

    负责初始化Hibernate

  Transaction接口

    可选接口,对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的User Transaction、甚至可以是CORBA 事务。

  Query接口

    有两种表达方式:HQL语言或本地数据库的SQL语句。

    经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

  Criteria接口

    同Query,轻量级,不能在Session之外使用

  Configuration类

    对Hibernate 进行配置,负责启动Hibernate,再创建一个Session Factory对象

核心对象

JDBC   Java DataBase Connectivity    java数据库连接

l  是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

l  常用类:Driver Manager、Connection、Statement / Prepared Statement / Callable Statement、Result Set

JNDI   Java Naming and Directory Interface   Java命名和目录接口

  JNDI可访问的现有的目录及服务有:DNS、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。

 

JDO(Java Data Object)

l  是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API。

l  JDBC只是面向关系数据库(RDBMS);JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。

l  通过访问JDO Instance , 达到访问JDO Instance 所代表的数据对象,包括:ERP,数据库系统等,使数据的存储介质对于应用的开发人员完全透明。

JTA(Java Transaction API)和JTS(Java Transaction Services)——为J2EE平台提供了分布式事务服务(distributed transaction)

对比如下:

DAO

  • l  ⒈事务划分代码被嵌入到DAO类内部
  • l  ⒉DAO类使用JDBC API来进行事务划分
  • l  ⒊调用者没有划分事务的方法
  • l  ⒋事务范围被限定在一个单一的JDBC连接

JTA

  • l  ⒈用JTA对事务进行划分
  • l  ⒉事务划分代码被DAO分开
  • l  ⒊调用者承担划分事务的责任
  • l  ⒋DAO参与一个全局的事务中

缓存管理

第一级别的缓存,是Session级别的缓存,它是属于事务范围的缓存。

  当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。

  当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法:

    evict(Object obj):从缓存中清除参数指定的持久化对象。

    clear():清空缓存中所有持久化对象。

第二级别的缓存是Session Factory级别的缓存,它是属于进程范围或群集范围的缓存。

** 查询缓存,依赖于第二级缓存。

延迟加载

get不支持延迟加载,load支持延迟加载。

查询语言

HQL                   根据面向对象的查询语言检索对象

导航对象图           根据已经加载的对象,导航到其他对象

OID                   根据对象标识来检索对象

QBC                  根据条件查询接口(Criteria 接口、Criterion 接口和Expression 类)实现对数据的检索

原生SQL             根据数据库的SQL 查询语句检索对象

时间: 2024-10-29 04:59:32

Hibernate(Control)的相关文章

一口一口吃掉Hibernate(五)——一对多单向关联映射

版权声明:本文为博主原创文章,未经博主允许不得转载.如需转载请声明:[转自 http://blog.csdn.net/xiaoxian8023 ] 在上一篇博客<一口一口吃掉Hibernate(四)--多对一单向关联映射>中,介绍了多对一的关联映射,今天就反过来说一下一对多的单向关联映射. 可能有人会对这2篇博客的题目有点混淆不清,跟日常说的关系有点不同.我们日常说的比如父子关系,夫妻关系都是说的双向关系,而现在讨论的则是单向关系,所以也就有了多对一和一对多的说法. 二者的关系其实很简单,只是

攻城狮在路上(壹) Hibernate(十七)--- Hibernate并发处理问题

一.多个事务并发运行时的并发问题: 总结为第一类丢失更新.脏读.虚读.不可重复读.第二类丢失更新. 1.第一类丢失更新: 撤销一个事务时,把其他事务已提交的更新数据覆盖. 2.脏读: 一个事务读到另一个事务未提交的更新数据. 3.虚读(幻读): 一个事务读到另一个事务已提交的新插入的数据. 4.不可重复读: 一个事务读到另一个事务已提交的更新数据. 5.第二类丢失更新: 这是不可重复读的特例,一个事务覆盖另一个事务已提交的更新数据.二.数据库系统的锁的基本原理: 数据库系统采用锁来实现事务的隔离

攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型

Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Java基础类型的Hibernate映射类型 Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer或者int int或者java.lang.Integer INTEGER   long long BIGINT   short short SMALLINT   byte

深入浅出Hibernate(二)多对一关系映射

学习Hibernate是为了更方便的操作数据库,在数据库中的关系模型中存在多对一的关系,比如下图所示的员工和部门之间的关系,那么这种关系在Hibernate中如何映射呢?让我用一个小Demo来详细讲解. 建立映射分为以下几步: 1.设计domain对象Department.Employee,代码如下: package cn.itcast.hibernate.domain; public class Department { private int id; private String name;

使用annotation配置hibernate(1)

Hibernate3.0后新增了annotation的配置方式,比起xml有着更加简洁的配置 1:修改hibernate.cfg.xml 之前<mapping>标签中配置了hbm资源文件 <mapping resource="User.hbm.xml"/> 由于现在使用了注解方式代替了hbm文件,所以需要修改mapping标签的内容 <mapping class="com.zlt.hibernatedemo.User"/> 2:U

攻城狮在路上(壹) Hibernate(七)--- 通过Hibernate操纵对象(下)

一.与触发器协同工作: 当Hibernate与数据库的触发器协同工作时,会出现以下两类问题: 1.触发器使Session缓存中的数据和数据库中的不一致: 出现此问题的原因是触发器运行在数据库内,它执行的操作对Session是透明的. 解决方案:在执行完包含有触发器的操作之后,立刻调用Session的flush()和refresh()方法,迫使Session的缓存与数据库同步. 2.Session的update()方法盲目的激发触发器: 这种情况主要发生在Session调用update()或sav

SSH---集成Struts2+Spring+Hibernate(一)

SSH---集成Struts2+Spring+Hibernate(一) 本方案让Spring创建Struts2的Action,不让Spring完全管理Struts2的Action,Struts2Action中的依赖对象,默认会根据名称自动装配 1.创建web项目 2.引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下 *commons-logging-1.0.4.jar *freemarker-2.3.15.jar *ognl-2.7.3.jar * struts2-core-2

千山万水之Hibernate(四)——关联映射(多对一)

在上一篇文章(<千山万水之Hibernate(三)--基本映射 >)中,我们介绍了怎样通过Hibernate进行最基本的单实体映射以及Hibernate设计的一些基本原理,本篇文章将介绍关联映射中的多对一映射是如何实现的. 原理分析 我们拿学生和班级为示例,学生属于某一个班级,而且多个学生是有可能属于同一个班级的,相应的实体关系图为: Class的映射文件向上一篇我们介绍到的基本映射文件那样编写便可以,而对于Student实体,我们需要从Student中得出对应班级,而Student与Clas

hibernate(四)一对多单向、多对一双向、自身双向关联

?经过前几篇文章的简略总结,主要认识了关于hibernate的基本认识,顺便认识了hibernate的简单的一个原理.具体参见 Hibernate (一)hibernate入门 Hibernate(二)hibernate原理简单实现对比JDBC hibernate(三)入门级--hibernate实例 从这篇文章开始就接触具体hibernate是如何来配置使用,更多的是一些细节的掌握.首先需要声明的是作者也是在诸多资料和工作学习中不断在更新自己关于知识的理解,难免出现一些在现阶段的主观认识和片面