版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章使用使用Hibernate完成对象持久化完成对象持久化回顾回顾 在在Struts中,循环显示中,循环显示List中的数据使用什么标签?中的数据使用什么标签?如何使用如何使用MVC模式组织模式组织Java Web应用?应用?程序的程序的DAO层(数据访问层)完成什么任务?层(数据访问层)完成什么任务?预习检查预习检查为什么需要为什么需要Hibernate?Hibernate是什么?是什么?使用使用Hibernate的步骤是?的步骤是?本章任务本章任务使用使用Hibernate实现:实现:用户的增、删、改操作用户的增、删、改操作升级升级“房屋出租系统房屋出租系统”使用使用Hiberna
2、te实现用户注册实现用户注册使用使用hibernate实现房屋信息的增、删、改实现房屋信息的增、删、改了解了解Hibernate基本原理基本原理 学会编写实体映射文件学会编写实体映射文件 学会使用学会使用Hibernate完成数据增、删、改操作完成数据增、删、改操作 学会在项目中使用学会在项目中使用Hibernate本章目标本章目标为什么使用为什么使用Hibernate?在编写在编写DAO层代码时,容易出现哪些问题?层代码时,容易出现哪些问题?思考:这部分代码思考:这部分代码规律性很强,是否规律性很强,是否可以采用可以采用“通用通用”的方法的方法“集中集中”解解决?决?代码繁琐代码繁琐容易出错
3、容易出错纯纯“体力体力”劳动劳动工作量大工作量大占用大量开发时间占用大量开发时间为什么使用为什么使用Hibernate?使用使用Hibernate后的后的DAO层代码:层代码:代码精简易读代码精简易读封装了封装了JDBC操作,操作,以面向对象的方式以面向对象的方式操作数据操作数据开发工作量小,可开发工作量小,可以将精力集中在业以将精力集中在业务逻辑的处理上务逻辑的处理上public class FwxxDAOHibImpl extends BaseHibernateDAO implements FwxxDAO public FWXX get(int fwid) super.get(FWXX.c
4、lass,fwid); public void add(FWXX fwxx) super.add(fwxx); public void del (int fwid) super.del(FWXX.class,fwid); public void update(FWXX fwxx) super.update(fwxx); Hibernate就是用来就是用来解决这些问题的解决这些问题的什么是什么是Hibernate?Hibernate之父:之父:Gavin KingJBoss核心成员之一核心成员之一EJB3.0专家委员会成员专家委员会成员Hibernate In Action作者作者2001年开始
5、开发年开始开发Hibernate2003年年Hibernate发展为发展为Java世界主流持久层框架世界主流持久层框架充满激情充满激情脾气倔强脾气倔强永不言败永不言败Hibernate是一个优秀的持久化框架是一个优秀的持久化框架什么是持久化?什么是持久化?内存内存姓名:小颖姓名:小颖性别:女性别:女特长:英语、程序设计特长:英语、程序设计瞬时状态瞬时状态磁盘磁盘持久状态持久状态用用JDBC完成数据在持久和瞬时状完成数据在持久和瞬时状态间的转换态间的转换:stmt.execute ( ).瞬时状态:瞬时状态:保存在内存的程序数据,程序退出保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状
6、态后,数据就消失了,称为瞬时状态持久状态:持久状态:保存在磁盘上的程序数据,程序退保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持出后依然存在,称为程序数据的持久状态久状态持久化:持久化:将程序数据在瞬时状态和持久状态将程序数据在瞬时状态和持久状态之间转换的机制之间转换的机制持久化持久化Hibernate是一个主流的是一个主流的ORM框架框架什么是什么是ORM?对象数据(对象数据( )name:小颖:小颖sex:女:女skill:英语、程序设计:英语、程序设计User对象对象持久化层持久化层业务逻辑层业务逻辑层表现层表现层数据库数据库TBL_User表表关系型数据关系型数据( )
7、映射信息映射信息类类: User表表: TBL_User属性属性字段字段nameuser_namesexuser_sexskilluser_skillORM(对象(对象-关系映射):关系映射):完成对象数据到关系型数据映射的完成对象数据到关系型数据映射的机制称为对象机制称为对象-关系映射,简称关系映射,简称ORM。 小结小结是一个主流的持久化框架是一个主流的持久化框架在在JDBC基础上进行分装基础上进行分装只需要少量代码就可以完成持久化工作只需要少量代码就可以完成持久化工作是一个优秀的是一个优秀的ORM(对象(对象-关系映射)机制关系映射)机制通过映射文件保存映射信息通过映射文件保存映射信息在
8、业务层以面向对象的方式编程,不用考虑数据保存形式在业务层以面向对象的方式编程,不用考虑数据保存形式使用使用Hibernate实现用户添加实现用户添加如何使用如何使用Hibernate实现实现“用户添加用户添加”功能?功能?使用使用Hibernate的的“3个准备,个准备,7个步骤个步骤”准备准备1:导入:导入Hibernate库(库(jar包)包)演示示例:添加演示示例:添加Hibernate库到项目库到项目使用使用Hibernate的基本步骤的基本步骤准备准备2:添加配置文件:添加配置文件 - hibernate.cfg.xml jdbc:microsoft:sqlserver:/local
9、host:1433;Database=zf sa pwd com.microsoft.jdbc.sqlserver.SQLServerDriver org.hibernate.dialect.SQLServerDialect true 配置数据库配置数据库链接链接数据库数据库“方言方言”运行时在控制台显示运行时在控制台显示SQL语句语句映射文件,可以有多个映射文件,可以有多个使用使用Hibernate的基本步骤的基本步骤准备准备3:添加实体类和映射文件(添加实体类和映射文件(User.hbm.xml)package com.aptech.jb.entity;public class User
10、implements java.io.Serializable private Integer uid; private String uname; private String upass; public User() / 默认构造方法默认构造方法 / Getter and setter实现实现Serializable接口接口添加默认构造方法添加默认构造方法实体类到表的映射实体类到表的映射主键主键属性到字段的映射属性到字段的映射主键生成器:主键生成器:native 由数据库由数据库生成生成assigned 在程序在程序中指定中指定小结小结使用使用Hibernate的三项准备工作是?的三项准备
11、工作是?添加添加Hibernate库库添加添加Hibernate配置文件配置文件添加对应表的实体类和映射文件添加对应表的实体类和映射文件Hibernate配置文件中配置了哪些信息?配置文件中配置了哪些信息?Hibernate使用的实体类和之前定义的实体类有什么区别?使用的实体类和之前定义的实体类有什么区别?使用使用Hibernate,系统中添加一个表的时候,都有哪些准备,系统中添加一个表的时候,都有哪些准备工作要做?工作要做?添加实体类添加实体类添加映射文件添加映射文件在在hibernate.cfg.xml中增加中增加使用使用Hibernate实现用户添加实现用户添加使用使用Hibernate
12、的的7个步骤:个步骤: 使用使用Hibernate实现用户添加实现用户添加七个步骤对应的程序代码七个步骤对应的程序代码public static void main(String args) Configuration conf = new Configuration().configure();/1、读取配置文件、读取配置文件 SessionFactory sf = conf.buildSessionFactory();/ 2、创建、创建SessionFactory Session session = sf.openSession();/ 3、打开、打开Session Transaction
13、 tx = null; try tx = session.beginTransaction();/ 4、开始一个事务、开始一个事务 / 5、持久化操作、持久化操作 User user = new User(); user.setUname(Hibernate user); user.setUpass(password); session.save(user); mit();/ 6、 提交事务提交事务 catch(Exception e) if (null!=tx)tx.rollback(); e.printStackTrace(); finally session.close();/ 7、关闭
14、、关闭Session 执行结果执行结果Hibernate执行过程执行过程Configuration SessionFactory SessionTransaction创建创建创建创建开始开始save delete update get mit() session.close()执行执行Hibernate.cfg.xmlFWXX.cfg.xmlUser.hbm.xml结束结束创建和销毁都相当耗费创建和销毁都相当耗费资源,通常一个系统内资源,通常一个系统内一个数据库只创建一个一个数据库只创建一个类似于类似于JDBC中的中的Connection 复杂的查询操作稍后介绍复杂的查询操作稍后介绍 使用使用
15、Hibernate实现数据的加载实现数据的加载/删除删除/修改修改 程序代码程序代码Session session = sf.openSession();User user = (User)session.get(User.class, id);session.close();System.out.println(user.getUname() + , + user.getUpass();根据主键加载根据主键加载tx = session.beginTransaction();User user = this.testLoad(id);user.setUname(new Name);sessio
16、n.update(user);mit();修改修改tx = session.beginTransaction();User user = this.testLoad(id);session.delete(user);mit();删除删除没有更新数据,没有更新数据,不进行事务控不进行事务控制制先加载,再更新先加载,再更新不再需要繁琐的逐字不再需要繁琐的逐字段编码段编码先加载,先加载,再删除再删除演示示例:演示示例:HibTest2.java小结小结简述:使用简述:使用Hibernate的的“3个准备,个准备,7个步骤个步骤”。使用工具简化使用工具简化Hibernate开发开发使用使用Hibern
17、ate开发虽然简化了开发工作,但还要编写额开发虽然简化了开发工作,但还要编写额外的配置文件和映射文件,还是很繁琐!外的配置文件和映射文件,还是很繁琐!有解决的办法吗?有解决的办法吗?MyEclipse对对Hibernate的支持可以进一步简化我们的工作的支持可以进一步简化我们的工作使用工具简化使用工具简化Hibernate开发开发 总结一下,刚才演示过程中,总结一下,刚才演示过程中,MyEclipse工具帮我们工具帮我们做了哪些事情?做了哪些事情?1、给项目添加、给项目添加Hibernate支持(自动添加支持(自动添加jar包)包)2、自动生成、自动生成hibernate.cfg.xml配置文
18、件配置文件3、生成实体类、映射文件、生成实体类、映射文件演示示例:使用演示示例:使用MyEclipse简化简化Hibernate开发开发注意:注意:关键是正确配置了数据库连接信息关键是正确配置了数据库连接信息在项目中使用在项目中使用Hibernate如何在项目中使用如何在项目中使用Hibernate?重新实现租房系统重新实现租房系统FwxxDAO接口接口1、在原项目基础上添加、在原项目基础上添加Hibernate支持支持2、生成、生成TBL_FWXX表对应的实体和映射文件表对应的实体和映射文件3、添加、添加com.aptech.jb.dao.hibimpl.FwxxDAOHibImpl类,实现
19、类,实现FwxxDAO接口接口演示示例:使用演示示例:使用Hibernate重新实现重新实现FwxxDAO接口接口在项目中使用在项目中使用HibernateFwxxDAOHibImpl中中add方法代码如下。方法代码如下。 下面蓝色的代码和下面蓝色的代码和del、update方法的代码存在重复,可以采取什么方法精简呢?方法的代码存在重复,可以采取什么方法精简呢?public void add(FWXX item) Session session = HibernateSessionFactory.getSession(); Transaction tx = null; try tx = ses
20、sion.beginTransaction(); session.save(item); mit(); catch(Exception e) if(null!=tx) tx.rollback(); e.printStackTrace(); finally session.close(); 在项目中使用在项目中使用Hibernate使用使用BaseHibernateDAO简化编码简化编码public abstract class BaseHibernateDAO protected void add(Object item) Transaction tx = null; Session session = HibernateSessionFactory.getSession(); try tx = session.beginTransaction(); session.save(item); mit(); catch (Exception e) if(null!=tx) tx.rollbac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 味精微生物菌种工安全文明考核试卷含答案
- 平板显示膜回收工岗前安全行为考核试卷含答案
- 列车员岗前竞争考核试卷含答案
- 无机化学反应生产工创新意识竞赛考核试卷含答案
- 无机盐生产工岗前激励考核试卷含答案
- 柠檬酸发酵工安全实操水平考核试卷含答案
- 电视广告:剖析与应对-从营销手法到理性消费
- 雷峰塔数学题目及答案
- 广西大专去年考试题目及答案
- 课件11 签约成交
- 工业固废综合治理行动计划落实
- 智能化全过程监理实施细则
- 品质异常处理程序
- 低压电工培训课件
- 水利单位档案管理制度
- DB50T 1932-2025国际医疗服务规范
- 2026安全生产法完整版
- (2025年)贵阳市云岩区网格职员考试题及答案
- 2025年城投建设管理岗笔试题目及答案
- 成飞流程与管理制度(3篇)
- 营区规范管理制度
评论
0/150
提交评论