hibernate复习.doc

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate复习

Hibernate 什么是实体对象?通常来源于现实中的事物,必须有对象的标识 为什么会出现hibernate? 以前用jdbc的时候,我们就发现,重复的代码很多,处理起来特麻烦 我们用jdbc开发的时候,也并不是完全的面向对象,通常我们做法是组串,然后用statement之类的东西,不太符合面向对象的分析 Hibernate出现的最关键原因是大家经常说的“阻抗不匹配”,我们用java,它是面向对象的语言,而用的数据库都是关系型数据库,比如面向对象有继承这样的概念,而关系数据库则没有,hibernate解决了这样的问题,hibernate有存储,有加载,同时还做得有缓存等,其实和hibernate差不多的还有一些OR框架:Apache的 OJB, sun公司的JDO,oracle公司的TopLink,还有大名鼎鼎的EJB,据说EJB3.0能够收复一些被hibernate占领的一些失地,不过hibernat是java程序员必备的技能,其实对于OR框架,只要把hibernate学好了,其他的学起来也没什么难度 Hibernate的优点: SQL语句大多不用写,可以提高生产率 使开发更对象化了,传统的开发都是先设计数据库表,再进行开发,面向对象的开发我们的分析设计都应该以对象为出发点,hibernatre实现了从对象到关系的映射 因为它屏蔽了数据库的差异,所以可移植性就显得比较好 它实现了透明持久化,也就是说我们不用继承任何类和任何方法,也就是常说的POJO对象,也就是说我们的类是可以离开hibernate框架的,还有一些说法,叫没有浸入性,轻量级的等 Hibernate的缺点:不光是hibernate,所有的orm框架都有一样的缺点,所以说我们的jdbc是非常重要的 聚集性操作不适合,也就是我们说的批量性修改、批量性添加、批量性删除,orm框架不太适合,它的效率低 有时在程序开发过程中,得使用数据库的特定功能的时候,也不适合用ORM 其实在有些很重要,很关键的应用的时候,我们也不用ORM框架,这主要是看开发习惯以及项目的要求 Hibernate开发的一般步骤:这个非常简单,我只写一下步骤,不举例了 新建一个java项目 引入相关的jar 包括 HIBERNATE_HOME/hibernate3.jar HIBERNATE_HOME/lib/*.jar 还有数据的jdbc驱动相关jar包 创建hibernate配置文件hibernate.cfg.xml,为了方便跟踪sql执行,在hibernate.cfg.xml文件中加入property name=hibernate.show_sqltrue/property一般建议放classpath路径下,我们建议最好用日志Log4j,加入Log4j配置文件 定义相关的实体类,比如就User.java吧 定义User的映射文件User.hbm.xml,根据hibernate的最佳实践,我们应该把映射和实体类放在同一个包里 将User.hbm.xml文件加入到hibernate.cfg.xml文件里 编写hbm2ddl工具类,将实体类生成数据库表 关于对象的三种状态(以往班级掌握不好的地方) 我先找一个大概的图让同学看看,然后我们再举列说明一下对象状态的转变,因为hibernate做了缓存处理,所以对象的状态了解是比较重要的,在hibernate里面有一个很重要的对象,叫session,hibernate对它做了一级缓存处理,session和我们web里面的session完全是不同的东西,你可以把它理解成connection,但它不是简单的对connection的封装,它还增加了缓存功能等 瞬时对象:(Transient Object)它们没有任何跟数据库表相关联的行为,只要不再被任何其他对象所引用,它们的状态将会丢失,并由垃圾回收机制回收,没纳入session的管理,数据库没有与之对应的记录,比如:我们new 一个对象的时候,它就是transient状态 持久化状态:Persist Object ,它纳入了session的统一控制,持化化是在事务控制中进行的,它们的状态在事物提交的时候和数据库进行同步,当事务提交的时候,通过执行相关的sql语句,把对象在内存中的状态同步到数据库中 离线状态: Detached Obejct,Session关闭以后,对象就不能纳入session的管理了,这时就转化为detached状态,detached和transient的相同之处是都不由session管理,状态都将会丢失,并由垃圾回收机制回收,不同之处是在于是否在数据库中有与之对应的记录 为了测试,我们写一个工具类 public class HibernateUtils { priv

文档评论(0)

3774384 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档