《hibernate入门.ppt》由会员分享,可在线阅读,更多相关《hibernate入门.ppt(24页珍藏版)》请在三一办公上搜索。
1、1,本讲主要内容,主要内容 1.深入了解hibernate 2.掌握如何配置hibernate,完成对数据库 的增删改查操作 3.hibernate中复杂的映射(一对一,多对 一,一对多,多对多),2,1.了解hibernate,1.1回顾JDBCJava访问数据库最原始的方法是通过JDBC来完成的。JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC是J2EE标准的一部分,它提供了一种基准,据此可以构建更高级的工具和接口,使数据库开
2、发人员能够编写数据库应用程序。,3,java.sql包提供了JDBC API,开发者可以通过它们编写数据库的程序代码。在java.sql包中常见的类和接口包括以下内容。DriverManager类:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。Connection类:负责维护JSP/JAVA数据库程序和数据库之间的联机。可以建立三个非常有用的类对象。,4,Statement类:通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接新增、删除或修改操作 Prepare
3、dStatement类:PreparedStatement类和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待 使用,当有单一的SQL指令比多次执行时,用PreparedStatement类会比Statement类有效率 ResultSet类:负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。,5,1.2持久化层访问数据库代码与业务逻辑混杂在一起带来了很多问题,这样的程序设
4、计严重显示了程序的可扩展性和适应性,所以有必要要把涉及数据库操作的代码分离出来与业务逻辑分离。就形成了所谓“持久化层”的概念。持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等(在本书中介绍的“持久化”仅针对将存储数据库的情况)。,6,1.3 ORM面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM框架就是这样的解决方案。ORM并不是一种具体的产品,而是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计
5、语言到关系数据库的映射。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。ORM的全称是Object/Relation Mapping,即对象/关系映射。ORM也可理解是一种规范,具体的ORM框架可作为应用程序和数据库的桥梁。目前ORM的产品非常多,比如Apache组织下的OJB,Oracle的TopLink,JDO,JPA等等,当然还包括hibernate。,7,1.4 hibernateHibernate是一个免费的开源Java包,它使得程序与数据库的交互变得十分容易,更加符合面向对象的设计思想,像数据库中包含普通Java对象一样,而不必考虑
6、如何把它们从数据库表中取出。使开发者可以专注于应用程序的对象和功能,而不必关心如何保存它们或查找这些对象开源和免费的License,轻量级封装,避免引入过多复杂的问题,调试容易,可减轻程序员负担。目前Hibernate在国内的开发人员相当多可以到Hibernate的网站http:/下载Hibernate包,8,2创建Hibernate程序步骤,编写hibernate配置文件创建持久化类(POJO)编写映射(mapping)文件,9,2.1 hibernate配置文件,(1)建立数据库连接 如连接到sqlserver2000,需要3个jar包文件。msbase.jar,mssqlserver.j
7、ar,msutil.jar(2)加载hibernate 增加相应的jar包,文件,HibernateSessionFactory类.,10,2.2 创建持久化类(POJO),假设某数据库中有表login id(int,not null),name(varchar,50),pass(varchar,50)创建对应的类Login,11,Login.java,通过其他工具,12,2.3 编写映射(mapping)文件,提示:需把该文件声明增加到文件中,并与Login.java放在同一目录,13,2.4 了解hibernate的核心类,了解几个关于hibernate的核心类1.Configuratio
8、n类 Configuration类的作用是对Hibernate进行配置,以及对它进行启动。Configuration可以完成以下几方面的工作。(1)加载配置文件。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象,(2)动态添加映射文件。还可以利用Configuration类在程序中添加XML映射定义文件。(3)也可以通过Configuration指定配置属性:,14,2.SessionFactory类这里用到了一个设计模式工厂模式,用户程序从工厂类SessionFactory中取得Sessio
9、n的实例。SessionFactory不是轻量级的。它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当项目要操作多个数据库时,必须为每个数据库指定一个SessionFactory。SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。,15,3.Session类Session类对于Hibernate 开发人员来说是一个最重要的类。Session是持久层操作的基础,相当于JDBC中的Connectio
10、n。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。Hibernate对数据库的基本操作时通过session来完成的,16,4.Transaction接口Transaction类是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate的设计者自己写的底层事务处理代码。Transaction接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA中的UserTransaction
11、、甚至可以是CORBA事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。与Transaction相关还有一个Callback类。当一些有用的事件发生时例如持久对象的载入、存储、删除时,Callback类会通知Hibernate去接收一个通知消息。一般而言,Callback类在用户程序中并不是必须的,但要在项目中创建审计日志时,可能会用到它。,17,2.5 编写对数据库操作,(1)增加,删除,修改 session=HibernateSessionFactory.getSession();session.save(object);/
12、delete,update session.beginTransaction().commit();/提交事务 if(session!=null)session.close();,18,(2)查询(查询有一个或多个结果)String hql=“from Login”;Query query=HibernateSessionFactory.getSession().createQuery(hql);List list=query.list();具体封装看hibernateUtil.java,19,3 复杂关系映射,Hibernate中的关联(Association)映射主要有3种:一对一关联、一对多(或多对一)关联、多对多关联。每种关联都可以分为单向和双向两种。关联关系映射通常情况是最难配置正确的。,20,3.1 一对一映射,例如有表 student(sid,name,roomid);Room(rid,address)userinfo,21,Room:,22,一对多(员工和订单),假设有如下关系表 student(sid,sname,cid);classes(cid,cname)考虑:如何进行查询和增加,23,student中需声明,24,classes中需声明,