[JAVA应用程序开发] B05 Hibernate查询和事务.ppt_第1页
[JAVA应用程序开发] B05 Hibernate查询和事务.ppt_第2页
[JAVA应用程序开发] B05 Hibernate查询和事务.ppt_第3页
[JAVA应用程序开发] B05 Hibernate查询和事务.ppt_第4页
[JAVA应用程序开发] B05 Hibernate查询和事务.ppt_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

JAVA应用程序开发,第5章Hibernate查询和事务,2012年4月,邱晓荣JAVA应用程序开发PPT,2,章节目标,熟悉Hibernate映射配置掌握Hibernate实体对象关联映射掌握HQL查询理解事务的概念掌握事务的使用,2012年4月,邱晓荣JAVA应用程序开发PPT,3,章节目录,Hibernate持久化对象Hibernate持久化对象基本操作实体对象关联关系映射HQL查询语言简介Hibernate事务,2012年4月,邱晓荣JAVA应用程序开发PPT,4,5.1Hibernate持久化对象,在使用Hibernate时必须理解持久化对象的概念,持久化对象的作用是完成持久化操作,也就是通过该对象可以对数据库中的数据进行CRUD操作(亦可理解为以面向对象的方式操纵数据库)持久化对象=POJO+映射文件POJO(普通Java对象):类似于JavaBean映射文件(*.hbm.xml):该类文件负责把数据库中的记录映射到实体类之间的关联关系中。,2012年4月,邱晓荣JAVA应用程序开发PPT,5,首先创建MySQL数据库,数据库名为Product,然后利用素材文件夹根目录下的B0403.sql创建相关数据表并初始化数据。,2012年4月,邱晓荣JAVA应用程序开发PPT,6,ProductInfo.java(POJO类),2012年4月,邱晓荣JAVA应用程序开发PPT,7,ProductInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,8,Hibernate映射文件详解(一)根节点,2012年4月,邱晓荣JAVA应用程序开发PPT,9,Hibernate映射文件详解(二)元素:用来定义一个POJO类与数据库表之间的映射。,2012年4月,邱晓荣JAVA应用程序开发PPT,10,Hibernate映射文件详解(三)元素:用来定义一个POJO类属性与数据库表主键之间的映射。,2012年4月,邱晓荣JAVA应用程序开发PPT,11,元素相关属性:name:标识POJO类中属性的名称type:标识Hibernate的类型column:数据表中主键字段的名称generator:内置生成器,class属性值可以设置为increment、identity、sequence、hilo、seqhilo、uuid、guid、native、assigned、select、foreign、sequence-identity。其中native可以根据底层数据库的能力选择identity、sequence或者hilo中的一个。,2012年4月,邱晓荣JAVA应用程序开发PPT,12,Hibernate映射文件详解(四)元素:用来定义POJO类属性与数据库表属性之间的映射。,2012年4月,邱晓荣JAVA应用程序开发PPT,13,5.2Hibernate持久化对象基本操作,创建数据库首先创建MySQL数据库,数据库名为Product,然后利用素材文件夹根目录下的B0501.sql创建相关数据表并初始化数据。,2012年4月,邱晓荣JAVA应用程序开发PPT,14,创建项目新建DynamicWebProject:B0501导入Hibernate常用类库,并添加引用导入MySQL数据库的JDBC驱动,并添加引用,2012年4月,邱晓荣JAVA应用程序开发PPT,15,创建持久化类在JavaResources/src目录下新建包com.shawnqiu.bean在该包中新建持久化类ProductInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,16,ProductInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,17,创建Hibernate映射文件在JavaResources/src目录下新建包dbConfig在该包中新建表ProductInfo关于Hibernate的映射文件ProductInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,18,ProductInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,19,创建Hibernate配置文件在JavaResources/src目录下新建Hibernate配置文件hibernate.cfg.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,20,hibernate.cfg.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,21,创建HibernateSession类在JavaResources/src目录下新建包hibernate在该包中新建HibernateSession类HibernateSessionFactory.java,2012年4月,邱晓荣JAVA应用程序开发PPT,22,HibernateSessionFactory.java(PartI),2012年4月,邱晓荣JAVA应用程序开发PPT,23,HibernateSessionFactory.java(PartII),2012年4月,邱晓荣JAVA应用程序开发PPT,24,创建HibernateDAO类在JavaResources/src目录下新建包com.shawnqiu.dao.impl在该包中新建HibernateDAO类ProductInfoDAO.java,2012年4月,邱晓荣JAVA应用程序开发PPT,25,ProductInfoDAO.java(PartI),2012年4月,邱晓荣JAVA应用程序开发PPT,26,ProductInfoDAO.java(PartII),2012年4月,邱晓荣JAVA应用程序开发PPT,27,ProductInfoDAO.java(PartIII),2012年4月,邱晓荣JAVA应用程序开发PPT,28,创建JSP视图页面在WebContent目录下新建3个JSP页面add.jspupdate.jspdelete.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,29,add.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,30,update.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,31,delete.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,32,添加日志配置文件在src目录下新建perties,2012年4月,邱晓荣JAVA应用程序开发PPT,33,部署与测试依次输入如下网址:8080/B0501/add.jsp:8080/B0501/update.jsp:8080/B0501/delete.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,34,5.3实体对象关联关系映射,在Hibernate中实体对象关联关系表现在所映射的表与表之间的关系,采用关联操作,能够使有关系的表之间保持数据同步。同时关系操作能够使程序员在编写程序过程中,减少编写多表操作的代码量,并且优化了程序,提高了程序运行效率。将表之间的关联关系反映到实体当中,Hibernate中实体关联关系的种类有:单向一对一、单向多对一、单向一对多、单向多对多、双向一对一、双向多对一(双向一对多)、双向多对多。,2012年4月,邱晓荣JAVA应用程序开发PPT,35,5.3.1单向多对一关联,创建数据库首先创建MySQL数据库,数据库名为StudentScore,然后利用素材文件夹根目录下的B0502.sql创建相关数据表并初始化数据。,2012年4月,邱晓荣JAVA应用程序开发PPT,36,创建项目新建DynamicWebProject:B0502导入Hibernate常用类库,并添加引用导入MySQL数据库的JDBC驱动,并添加引用,2012年4月,邱晓荣JAVA应用程序开发PPT,37,创建持久化类在JavaResources/src目录下新建包com.shawnqiu.bean在该包中新建持久化类StudentInfo.javaScoreInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,38,StudentInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,39,ScoreInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,40,创建Hibernate映射文件在JavaResources/src目录下新建包dbConfig在该包中新建表StudentInfo关于Hibernate的映射文件StudentInfo.hbm.xml在该包中新建表ScoreInfo关于Hibernate的映射文件ScoreInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,41,StudentInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,42,ScoreInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,43,创建Hibernate配置文件在JavaResources/src目录下新建Hibernate配置文件hibernate.cfg.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,44,hibernate.cfg.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,45,创建HibernateSession类在JavaResources/src目录下新建包hibernate在该包中新建HibernateSession类HibernateSessionFactory.java,2012年4月,邱晓荣JAVA应用程序开发PPT,46,HibernateSessionFactory.java(PartI),2012年4月,邱晓荣JAVA应用程序开发PPT,47,HibernateSessionFactory.java(PartII),2012年4月,邱晓荣JAVA应用程序开发PPT,48,创建HibernateDAO类在JavaResources/src目录下新建包com.shawnqiu.dao.impl在该包中新建HibernateDAO类StudentScoreInfoDAO.java,2012年4月,邱晓荣JAVA应用程序开发PPT,49,StudentScoreInfoDAO.java(PartI),2012年4月,邱晓荣JAVA应用程序开发PPT,50,StudentScoreInfoDAO.java(PartII),2012年4月,邱晓荣JAVA应用程序开发PPT,51,创建JSP视图页面在WebContent目录下新建JSP页面:index.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,52,添加日志配置文件在src目录下新建perties,2012年4月,邱晓荣JAVA应用程序开发PPT,53,部署与测试依次输入如下网址:8080/B0502/index.jsp,2012年4月,邱晓荣JAVA应用程序开发PPT,54,5.4HQL查询语言简介,Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。,2012年4月,邱晓荣JAVA应用程序开发PPT,55,5.4.1实体查询,Hibernate中最常用的查询语句的形式如下:fromCatascat这个语句把别名cat指定给类Cat的实例,这样我们就可以在随后的查询中使用此别名了。关键字as是可选的,我们也可以这样写:fromCatcat,2012年4月,邱晓荣JAVA应用程序开发PPT,56,下面代码的执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回。,2012年4月,邱晓荣JAVA应用程序开发PPT,57,因为HQL语句与标准SQL语句相似,所以我们也可以在HQL语句中使用where字句,并且可以在where字句中使用各种表达式,比较操作符以及使用and,or连接不同的查询条件的组合。看下面的一些简单的例子:,2012年4月,邱晓荣JAVA应用程序开发PPT,58,5.4.2实体的更新,2012年4月,邱晓荣JAVA应用程序开发PPT,59,5.4.3实体的删除,2012年4月,邱晓荣JAVA应用程序开发PPT,60,5.4.4参数绑定,Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定:在Hibernate中也提供了类似这种的查询参数绑定功能,而且在Hibernate中对这个功能还提供了比传统JDBC操作丰富的多的特性,在Hibernate中共存在4种参数绑定的方式。,2012年4月,邱晓荣JAVA应用程序开发PPT,61,按参数名称绑定,在HQL语句中定义命名参数要用“:”开头,形式如下:上面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。,2012年4月,邱晓荣JAVA应用程序开发PPT,62,按参数位置绑定,在HQL查询语句中用“?”来定义参数位置,形式如下:同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表绑定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。注:在实际开发中,提倡使用按名称绑定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称绑定名参数的方式中是不需要调整程序代码的。,2012年4月,邱晓荣JAVA应用程序开发PPT,63,setParameter()方法,在Hibernate的HQL查询中可以通过setParameter()方法邦定任意类型的参数,如下代码:如上面代码所示,setParameter()方法包含三个参数,分别是命名参数名称,命名参数实际值,以及命名参数映射类型。,2012年4月,邱晓荣JAVA应用程序开发PPT,64,对于某些参数类型setParameter()方法可以根据参数值的Java类型,猜测出对应的映射类型,因此这时不需要显示写出映射类型,像前面的例子,可以直接这样写:但是对于一些类型就必须写明映射类型,比如java.util.Date类型,因为它会对应Hibernate的多种映射类型,比如Hibernate.DATA或者Hibernate.TIMESTAMP。,2012年4月,邱晓荣JAVA应用程序开发PPT,65,setProperties()方法,在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起,如下程序代码:setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。,2012年4月,邱晓荣JAVA应用程序开发PPT,66,5.5Hibernate事务,事务的概念事务的特性在Hibernate中使用事务,2012年4月,邱晓荣JAVA应用程序开发PPT,67,5.5.1事务的概念,设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:更新客户所购商品的库存信息;保存客户付款信息可能包括与银行系统的交互;生成订单并且保存到数据库中;更新用户相关信息,例如购物数量等等。正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。,2012年4月,邱晓荣JAVA应用程序开发PPT,68,但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态,否则,数据库的信息将会一片混乱而不可预测。库存信息没有被更新;用户也没有付款;订单也没有生成。数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。,2012年4月,邱晓荣JAVA应用程序开发PPT,69,事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰。作为一名软件设计师,必须了解事务并合理利用,以确保数据库保存正确、完整的数据。数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚(rollback)。,2012年4月,邱晓荣JAVA应用程序开发PPT,70,5.5.2事务的特性,ACID原子性(Atomic):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性(Consistent):事务在完成时,必须使所有的数据都保持一致状态。隔离性(Insulation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。持久性(Duration):事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。,2012年4月,邱晓荣JAVA应用程序开发PPT,71,5.5.3在Hibernate中使用事务,创建数据库首先创建MySQL数据库,数据库名为Product,然后利用素材文件夹根目录下的B0503.sql创建相关数据表并初始化数据。,2012年4月,邱晓荣JAVA应用程序开发PPT,72,创建项目新建DynamicWebProject:B0503导入Hibernate常用类库,并添加引用导入MySQL数据库的JDBC驱动,并添加引用,2012年4月,邱晓荣JAVA应用程序开发PPT,73,创建持久化类在JavaResources/src目录下新建包com.shawnqiu.bean在该包中新建持久化类ProductInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,74,ProductInfo.java,2012年4月,邱晓荣JAVA应用程序开发PPT,75,创建Hibernate映射文件在JavaResources/src目录下新建包dbConfig在该包中新建表ProductInfo关于Hibernate的映射文件ProductInfo.hbm.xml,2012年4月,邱晓荣JAVA应用程序开发PPT,76,ProductInfo.hbm.xml,2012年4月,

温馨提示

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

评论

0/150

提交评论