Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章

上传人:E**** 文档编号:89350303 上传时间:2019-05-23 格式:PPT 页数:90 大小:458.50KB
返回 下载 相关 举报
Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章_第1页
第1页 / 共90页
Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章_第2页
第2页 / 共90页
Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章_第3页
第3页 / 共90页
Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章_第4页
第4页 / 共90页
Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章》由会员分享,可在线阅读,更多相关《Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第8章(90页珍藏版)》请在金锄头文库上搜索。

1、第8章Hibernate 技 术,8.1 Hibernate概述 8.2 Hibernate的体系结构 8.3 SessionFactory配置 8.4 持久化类(Persistent Classes) 8.5 O/R Mapping基础 8.6 Hibernate查询语言 8.7 Hibernate示例 思考题,8.1 Hibernate概述,在当今的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦而浪费时间的。Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(Object/Relational Mapping,ORM)表示一种技术,用来

2、把对象模型表示的对象映射到基于SQL的关系模型结构中去。Hibernate不仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。,8.2 Hibernate的体系结构,图8.1 Hibernate体系结构图,下面对上图中一些对象进行定义及描述: SessionFactory (net.sf.hibernate.SessionFactory) SessionFactory:是对编译过的映射文件的一个安全的、不可变的缓存快照。它是Session的工厂,是ConnectionProvider的客户。 会话Session (ne

3、t.sf.hibernate.Session) 会话Session:是单线程、短生命期的对象,代表应用程序和持久化层之间的一次对话。封装了一个JDBC连接,是Transaction的工厂。, 持久化对象(Persistent Object) 持久化对象PO(Persistent Object):是单线程的对象,包含了持久化状态和商业功能。它们可能是普通的JavaBeans,与JavaBeans的惟一区别的是它们现在从属于且仅从属于一个Session。 临时对象(Transient Object)及其集合(Collection) 临时对象:指的是刚刚被程序实例化,还没有来得及被持久化,或者是被一

4、个已经关闭的Session所实例化的对象。, 事务Transaction (net.sf.hibernate.Transaction) 事务Transaction(可选):是单线程、短生命期的对象,应用程序用它来表示一批工作的原子操作, 是底层的JDBC、JTA或CORBA事务的抽象。一个Session可跨越多个Transaction事务。 连接提供者ConnectionProvider (net.sf.hibernate.connection.ConnectionProvider) ConnectionProvider(可选):是JDBC连接的工厂和池。从底层的Datasource或者 Dr

5、iverManager抽象而来,对应用程序不可见。, 事物实例工厂TransactionFactory (net.sf.hibernate.TransactionFactory) TransactionFactory(可选):事务实例的工厂,对应用程序不可见。,8.3 SessionFactory配置,net.sf.hibernate.cfg.Configuration的一个实例代表了应用程序中所有Java类到关系数据库映射的集合。这些映射是从一些XML映射文件中编译得来的,可以得到一个Configuration的实例,直接实例化它即可。下面这个例子,是用两个XML配置文件初始化映射: Con

6、figuration cfg = new Configuration() .addFile(“Vertex.hbm.xml“) .addFile(“Edge.hbm.xml“);,另外一个(或许是更好的)方法是让Hibernate自行用getResourceAsStream()来装载映射文件,程序示例如下: Configuration cfg = new Configuration() .addClass(eg.Vertex.class) .addClass(eg.Edge.class); Hibernate就会在classpath中寻找“/eg/Vertex.hbm.xml”和“/eg/Ed

7、ge.hbm.xml”的映射文件。 Configuration也可以指定一些可选的配置项。程序示例如下: Properties props = new Properties(); .,Configuration cfg = new Configuration() .addClass(eg.Vertex.class) .addClass(eg.Edge.class) .setProperties(props); Configuration是仅在配置期间使用的对象,从第一个SessionFactory开始建立的时候,它就失效了。 另一种配置属性的方法是把所有的配置都放在一个名为hibernate.

8、cfg.xml的文件中。这个文件应该放在你的CLASSPATH的根目录中。,my/first/datasource net.sf.hibernate.dialect.MySQLDialect false true net.sf.hibernate.transaction.JTATransactionFactory java:comp/UserTransaction ,配置Hibernate的程序如下所示: SessionFactory sf = new Configuration().configure().buildSessionFactory(); SessionFactory sf =

9、new Configuration() .configure(“catdb.cfg.xml“) .buildSessionFactory();,当所有的映射都被Configuration解析之后,应用程序为了得到Session实例,必须先得到它的工厂。这个工厂应该是被应用程序的所有线程共享的。当然,Hibernate并不禁止你的程序实例化多个SessionFactory,在你使用不止一个数据库的时候,这就有用了。 SessionFactory sessions = cfg.buildSessionFactory();,8.4 持久化类(Persistent Classes),持久化类有三个主要

10、的特性: (1) 为持久化字段声明访问器(accessors)和是否可变的标志(mutators); (2) 实现一个默认的构造方法(constructor); (3) 提供一个标识属性(identifier property)(可选)。 程序代码如下所示:,package eg; import java.util.Set; import java.util.Date; public class Cat private Long id; / identifier private Date birthdate; private Cat mate; private Set kittens priv

11、ate Color color; private char sex; private float weight;,private void setId(Long id) this.id=id; public Long getId() return id; void setMate(Cat mate) this.mate = mate; public Cat getMate() return mate; ,void setBirthdate(Date date) birthdate = date; public Date getBirthdate() return birthdate; void

12、 setWeight(float weight) this.weight = weight; public float getWeight() return weight; ,public Color getColor() return color; void setColor(Color color) this.color = color; void setKittens(Set kittens) this.kittens = kittens; public Set getKittens() return kittens; ,/ addKitten not needed by Hiberna

13、te public void addKitten(Cat kitten) kittens.add(kitten); void setSex(char sex) this.sex=sex; public char getSex() return sex; ,8.4.1 持久化对象(PO)与POJO的区别 实际上,持久化对象必须对应数据库中的实体,所以它和POJO是有所区别的。如,POJO是由new创建、由垃圾回收机制回收的;而持久对象是由insert数据库创建、由数据库delete删除的。基本上,持久化对象生命周期和数据库密切相关。 持久化对象往往只能存在于一个数据库Connection之中,C

14、onnnection关闭以后,持久化对象就不存在了;而POJO只要不被垃圾回收机制回收,则总是存在的。,由于存在诸多差别,因此持久对象PO在代码上肯定和POJO不同, 起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。,8.4.2 PO与VO的区别 PO即Persistent Object(持久化对象),VO即Value Object(简单值对象),只是简单携带了对象的一些属性信息。 PO纳入Hibernate管理框架中的VO,它代表了与数据库

15、中某条记录对应的Hibernate实体。PO的变化在事务提交时将反应到实际数据库中。 PO与VO的使用示例: User user=new User(); User anotherUser=new User(); User.setName(“lq“);,anotherUser.setName(“zm“);/此时user和anotherUser都是VO Transaction tx=session.beginTransaction(); Session.save(user);/此时的User已经经过Hibernate的处理,成为一个PO,而another仍然是个VO Tmit();/事务提交后,库

16、表中已经插入一条用户“lq“的记录,而anotherUser则无任何操作 Transaction tx=session.beginTransaction(); User.setName(“lq1“);/PO Anotheruser.setName(“zm1“);/VO Tmit();,/事务提交后,PO的状态被固化到数据库中,也就是“lq“用户被更新为“lq1“ /此时anotherUser仍然是个普通的Java对象,它的属性更改不会对数据库产生任何影响 经过Hibernate返回的对象也是PO,如: User user=(User)session.load(User.class,new Integer(1);,8.5 O/R Mapping基础,对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的且可以手工修改。映射语言是以Java为中心

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号