清华ITJAVAEE教学.ppt_第1页
清华ITJAVAEE教学.ppt_第2页
清华ITJAVAEE教学.ppt_第3页
清华ITJAVAEE教学.ppt_第4页
清华ITJAVAEE教学.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章,创建Hibernate应用,课程目标,创建Hibernate主配置文件 创建Hibernate映射文件 利用Hibernate API访问数据库 使用Hibernate转换工具 使用Hibernate实现数据的添加、删除、修改、查询等功能,体验项目,程序实现的功能:该程序通过Hibernate实现保存对象、删除和查询对象等功能。 程序运行的过程如下所示: (1)启动服务器后,访问添加数据页面,如图10-1所示:,图10-1 添加数据页面,(2)分别添加两条不同的数据,由于我们采用的是Struts框架,当添加成功后,视图仍将转发至添加数据页面。又由于在该页面中调用了查询表数据的Bean,所以将在此页面显示数据库中所有的信息,如图10-2所示:,图10-2 添加成功并将数据返回给客户端,(3)该程序实现了删除数据的功能,可以一次性删除多条数据。此时我们选择删除“Lily”的信息,如图10-3所示:,图10-3 删除数据,(4)当重复添加相同的账号,或数据长度过长时,则执行失败,从而视图将转发至错误页面。如图10-4所示:,图10-4操作失败页面,Hibernate 的配置文件,Hibernate的配置文件有两种形式,一种是xml格式的文件,默认的名称为“hibernate.cfg.xml”。另一种是“键=值”形式的属性文件,以“properties”为后缀,默认的名称为“perties”。这些配置文件都应存放于Web应用中的WEB-INFclasses目录下。Hibernate可以从它的配置文件中读取与数据库连接的相关信息。, true net.sf.hibernate.dialect.SQLServerDialect com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver:/localhost:1433; databasename=test sa ,hibernate.cfg.xml与perties文件介绍,hibernate.cfg.xml文件的根元素,这是hibernate.cfg.xml基本配置文件,元素是可以同时存在多个,在程序中,创建一个configuration实例,代码如下:,Configuration conf = new Configuration(); conf.configure();,新建一个Configuration实例时,Hibernate会在classPath中查找perties文件。 如果该文件存在,则将该文件内容加载到一个Properties的实例GLOBAL_PROPERTIES中,如果该文件不存在,将打印信息:perties not found 如果perties文件存在,系统还会验证一下这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印警告信息。,configure()方法默认会在classpath下寻找hibernate.cfg.xml文件。 如果没有找到该文件,系统会打印如下信息并抛出HibernateException异常:hibernate.cfg.xml not found 如果找到该文件,configure()方法会首先访问元素,并获取该元素的name属性。如果非空,将用这个配置的值来覆盖perties文件中hibernate.session_factory_name的配置值。,接下来configure()方法将访问的子元素。首先将使用所有的元素配置信息。在元素中,我们就可以配置它的“name”属性来获得访问数据库所需要的驱动、URL、数据库登录的用户名和密码等信息。下面我们来看看“name”属性所对应值的介绍。, “show_sql”,为true时,表示正在执行的程序。会在控制台打印出所执行的SQL语句,为false时就不会打印。一般在程序的开发阶段,都将其设置为true,以便观察程序的运行情况。 “dialect”,指定Hibernate SQL的一种方式。例如,如果使用MySQL数据库,设置为“net.sf.hibernate.dialect.MySQLDialect”。 “connection.driver_class”,表示配置访问数据库的驱动。 “connection.url”,表示配置访问数据库连接的URL。 “connection.username”,表示配置登录数据库的用户名。 “connection.password”,表示配置登录数据库的密码,上例的配置表示密码为空。,Hibernate能访问多种关系型的数据库,如SQL Server、MySQL、Oracle、Sybase等等。对于perties文件来说,它完成的功能和hibernate.cfg.xml文件相同。 当读取完元素的信息后,configure()方法将访问以下元素所配置的信息:, ,其中元素是必不可少的,必须通过配置元素的resource属性,configure()才能访问到我们定义的Java对象和关系数据库表的映射文件(*.hbm.xml)。在这里需要注意一点,在perties文件中,不需要配置被映射的类文件,而是通过实例化Configuration后调用它的addClass()方法来访问类文件,,创建持久化类,在创建映射文件前,应该创建一个持久化类。持久化类是指其实例需要被Hibernate持久化到数据库中的类。持久化类通常是域模型中的实体域类。持久化类需符合JavaBean的标准,包含一些属性,以及与之相对应的setter和getter方法。其中属性一般修饰为private,方法修饰为public。,在创建持久化类的时候,有些地方是我们必须要注意的。程序运行时Hibernate运用的是Java 的反射机制,将调用java.lang.reflect.Constructor .newInstance()方法来构造持久化实例,所有持久化类必须提供一个不带参数的默认构造方法。另外,对属性进行操作的setter与getter方法的书写都要符合规范,set与get后面必须紧跟属性名,且属性名字的第一个字母大写,如getName()。如果set与get后面的属性名全小写或全大写,那么会导致Hibernate在运行时抛出异常。,接下来为创建的持久化类建立一个关系数据库表,以用来保存数据。,由于Hibernate是通过xml格式的文件来指定对象与关系数据之间的映射,所以需要为持久化类(如Users)建立一个xml格式的映射文件,并将其命名为:类名.hbm.xml。然后将该文件存放于应用中的WEB-INFclasses目录下。 如以下代码:,创建映射文件(*.hbm.xml),在hibernate.cfg.xml文件中可以配置元素的resource 属性来指定映射文件,参考代码如下: ,1DTD,配置映射文件时,需要遵循它对应的DTD文件格式。每一个xml文件都有其各自的DTD文件。Hibernate的对象-关系映射文件所遵循的DTD文件,可以去/hibe rnate-mapping-2.0.dtd下载,该文件对元素有以下定义:,元素中存在子元素,hibernate-mapping-2.0.dtd文件对元素有如下定义:,2元素,按照hibernate-mapping-2.0.dtd的定义,在元素中必须存在子元素,且子元素只能出现一次。同时子元素可以出现多次,但是按照DTD的定义顺序,子元素必须在子元素之前。元素用来设置对象标识符,它有三个属性需要配置,分别如下:, name:与对应持久化类中的id属性名一致。 type:与对应持久化类中的id属性的数据类型一致。 column:与对应关系数据库表中的字段名一致。,元素有一个子元素,元素用来设定标识符生成器。 Hibernate提供了标识符生成器接口:net.sf.hibernate.id.Identifier Generator接口,并提供了多种内置的实现。例如以上接口的缩写名为“identity”。 代码书写可以写成如下格式:,3元素,元素包括多个属性,主要为以下几个:, name属性:指定持久化类的属性名称。 type属性:指定Hibernate映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。例如当SQL类型为varchar时,那么Hibernate映射类型为java.lang.String类型。 column属性:指定与类的属性映射的关系数据库表的字段名,该名称不区分大小写。 not-null属性:为true时,表示name属性不允许为null;当为false时,表示允许为null,默认为false。 length属性:指定类属性存储的数据长度。,利用Hibernate API访问数据库,Hibernate的初始化,首先创建一个Configuration类的实例,然后调用Configuration对象的configure()方法,此时Hibernate会读取默认文件路径下的配置文件,并将配置文件的信息加载至内存中。如当主配置文件名称不是默认的名称时,譬如为“a.xml”,可以作为参数传入configure()方法中。 接下来调用Configuration对象的buildSessionFactory()方法以创建SessionFactory类的实例,并把Configuration对象所包含的所有配置信息拷贝至SessionFactory对象的缓存中。 如以下代码:,Configuration conf = new Configuration(); conf.configure(); /conf.configure(“a.xml“); SessionFactory fact = conf.buildSessionFactory();,SessionFactory对象是一个重量级的对象,如果在应用中只有一个数据存储源,只需要创建一个SessionFactory实例,如果创建多个SessionFactory实例,将会消耗掉很大的内存空间。,访问Hibernate的Session接口,Hibernate初始化结束后,就可以调用SessionFactory实例的openSession()方法来获得Session实例,通过Session实例,可以对数据库进行各种操作, 如以下代码片段将一个Java对象保存至数据库中 。,Transaction tran; try tran =session.beginTransaction(); session.save(users); /users代表一个对象 mit(); catch(Exception e) if(tran!=null) tran.rollback(); finally session.close(); ,Session实例的删除、查询、更新、加载等方法的演示,1delete()方法演示 int id=1; Transaction tran=session.beginTransaction(); session.delete(“from Users as u where u.id=“+id); mit();,2find()方法演示 String name=null; String password=null; Transaction tran=session.beginTransaction(); List list=session.find(“from Users as u “); for(int i=0;ilist.size();i+) Users users=(Users)list.get(i); name=users.getName(); password=users.getPassword(); ,3update()方法的演示 int id=1; Transaction tran = session.beginTransaction(); List list=session.find(“from Users as u where u.uid=“+id); for(int i=0;ilist.size();i+) Users users=(Users)list.get(i); users.setPassword(“abc123“); session.update(users); mit(); mit();,4. load()方法演示 int id=1; Transaction tran = session.beginTransaction(); Users users=(Users)session.load(Users.class,id); users.setPassword(“abc123“); mit();,为了提高开发效率,Hibernate提供了一些实用工具,它们用于在映射文件、Java源文件以及数据库Schema之间自动进行转换。下面来看看这些工具的转换作用: hbm2java:根据映射文件自动生成Java源文件。 hbm2ddl:根据映射文件自动生成数据库Schema。 XDoclet:根据带有Doclet标记的Java源文件生成映射文件。 Middlegen:根据数据库Schema自动生成映射文件。,Hibernate提供的转换工具,编写映射文件,hbm2java和hbm2ddl工具是根据映射文件来自动生成Java源文件或数据库的,所以需要先编写对象-关系的映射文件。,元素用于精度的控制Java源代码中的内容,它具有以下属性:, class-description:指定描述类的javaDoc。 field-description:指定描述类属性的javaDoc。 interface:如果为true,表示生成接口而非类,默认为false。 implements:指定类所实现的接口。 extends:指定类继承的父类名。 generated-class:重新指定生成的类名。 scope-class:指定类的修饰符,默认为public。 scope-set:指定set方法的修饰符,默认为public。 scope-get:指定get方法的修饰符,默认为public。 scope-field:指定类的属性修饰符,默认为private。 use-in-toString:如果为true,表示在tostring方法中包含此属性。 gen-property:如果为false不会在java类中生成此属性,默认为true。 finder-method:指定find方法名。,元素用于精度的控制表的定义,它具有以下属性:, name:指定字段名称。 length:指定字段长度。 not-null:当为true时不允许为空,默认为false。 unique:当为true时该字段有唯一约束,默认为false。 index:给一个或多个字段建立索引。 unique-key:为多个字段设定唯一约束。 foreign-key:为外键命名。 sql-type:设定字段SQL的类型。 check:设定SQL检查约束。,运行hbm2java和hbm2ddl工具,将“hibernate.cfg.xml”配置文件拷贝至src目录下。我们将采用ANT工具来运行它。在项目的根目录下建立一个“build.xml”文件,这个文件含有四个任务,这里会用到“generate-code”、“schemaexport

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论