hibernate入门

一、域对象之间的关系:

  • 依赖:类之间访问关系。无需定义成属性。在A中访问B中的方法或属性,或者A负责实例化B。
  • 关联:类间的引用关系。以属性定义的方式表现。关联按照多重性可分为一对一、一对多、多对一和多对多。按照导航性可分为单项关联和双向关联。
  • 聚合:表示整体与部分的关系,整体和部分可以分开单独存在。
  • 组合:强聚合关系,整体和部分之间不能分开。
  • 泛化关系:类之间继承关系。

例子:

  • 一对一:用户登录信息和用户详细信息
  • 一对多:顾客信息对应订单信息,仓库对应货品
  • 多对一:一对多反过来
  • 多对多:货品和分类,老师和学生

  • 聚合关系是“has-a”关系,组合关系是“contains-a”关系;
  • 聚合关系表示整体与部分的关系比较弱,而组合比较强;
  • 聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

举例:

  • 聚合:电脑和CPU,主板等。
  • 组合:人和手,鼻子眼睛。集团公司和旗下子公司


二、hibernate入门

(一)hibernate是什么?

官方网址:http://www.hibernate.org/

面向java及.net等环境的对象-关系数据库映射工具。

1.开源的持久层框架.

2.ORM(Object/RelationalMapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.

3.连接java或.net应用和数据库的中间件.

4.对JDBC进行封装,负责java对象的持久化.

5.在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑


(二)、对象-关系映射:



(三)、hibernate历史

  • l2001年末,Hibernate的第一个版本发布;
  • l2003年6月,Hibernate2发布,并于年末获得Jolt(奥斯卡)2004大奖,后被JBOSS收纳为其子项目之一;
  • l2005年3月,Hibernate3正式发布。
  • l2010年4月,Hibernate3.5正式发布,支持JPA2。
  • 2010年10月,Hibernate3.6.0正式发布

Hibernate 3.6.0正式版主要改进包括:

1.Hibernate 3.6.0放弃了对JDK1.4的支持,也就是说Hibernate3.6.0最低要求JDK1.5了

2.Hibernate 3.6.0将hibernate-jmx与hibernate-annotations两个模块合并到了Hibernate-core中(使用maven的朋友需要修改下pom中的依赖关系了)

3.Hibernate 3.6.0改进了类型的支持

4.Hibernate 3.6.0增加了全新的Hibernate新手指南

5.Hibernate 3.6.0强化了注释对discriminators(鉴别)的支持

6.Hibernate 3.6.0改进了对Envers的支持


(四)、hibernate架构:



(五)、hibernate中的jar包:
lhibernate3.jar: 包含Hibernate3的基础框架和核心API类库,是必须使用的jar包。
ljavassist-3.9.0.jar: java字节码操作库,Hibernate用它来实现PO字节码的动态生成,它是非常核心的库,是必须使用的jar包。
ldom4j-1.6.1.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。
lcommons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
lslf4j-api-1.5.8.jar: 标准日志接口Facade,必须使用的jar包。
lantlr-2.7.6.jar:语法识别工具包。
ljta.jar: JTA(java事务处理的机制)规范,当Hibernate使用JTA的时候需要,不过App Server都会带上它,所以也是多余的。

(六)、API:

1 .Configuration:

配置hibernate,启动hibernate,创建sessionFactory对象。

Configuration的主要方法:

1,configure()
2,addXxx()

3,addProperties()/setProperty()/setProperties()

4,buildSessionFactory()

5,generateXxxScript()


2 .SessionFactory接口:

负责创建Session对象,可以通过Configuration对象创建SessionFactory对象。
SessionFactory对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
SessionFactory对象的创建会有较大的开销,而且SessionFactory对象采取了线程安全的设计方式,因此在实际中SessionFactory对象可以尽量的共享,在大多数情况下,一个应用中针对一个数据库可以共享一个SessionFactory实例。

主要方法:

1,getCache();

2,getCurrentSession()和openSession()的区别:

前者:获取当前线程中的session对象,后者:新开一个session对象

要使用getCurrentSession:

<propertyname="hibernate.current_session_context_class">thread</property>

3,openStatelessSession():无状态的session,不支持事务,高性能。

3.Session接口

使用最广泛,也被称为持久化管理器,它提供和持久化相关的操作。增、删、改、查等。不是线程安全的,因此,一个Session对象只可以由一个线程使用。避免多个线程共享。轻量级的,创建和销毁不需要消耗太多资源。Session中有一个缓存,称为一级缓存。存放当前工作单元加载的对象。

session的常用方法:(详见:http://blog.csdn.net/z_dendy/article/details/8924742)

  • beginTranscation和getTranscation()的简单写法
  • clear和一级缓存
  • connection和doWork
  • close
  • contains
  • delete
  • evict
  • flush
  • merge和saveOrUpdate
  • save和persist对比
  • refresh

4.Transaction数据库事务接口

  • 将应用代码从底层的事务实现中抽象出来,底层事务可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构,允许应用通过一组一致的API控制事务边界。
  • 使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)
  • Transcation的标准使用格式

5.Query和Criteria接口

都是查询接口,query实例包装了HQL查询语句,hql是面向对象的,它引用类名及类的属性名,而不是表名和字段名。Criteria接口完全封装了基于字符串形式的查询语句,比query接口更面向对象,他擅长执行动态查询。

Hibernate的运行过程如下:

1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,

2、并用这些信息生成一个SessionFactory对象,

3、然后从SessionFactory对象生成一个Session对象,

4、并用Session对象生成Transaction对象;

A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删

除、等操作;

B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction

对象将提交这些操作到数据库中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值