Hibernate第一章使用Hibernate完成对象持久化回顾Struts1中使用DispatchAction有哪些好处?Struts1中使用DispatchAction的步骤是什么?Struts1中使用实体对象做Form属性有什么好处?预习检查为什么需要Hibernate?Hibernate是什么?使用Hibernate的步骤是?本章任务使用Hibernate实现:用户的增、删、改操作升级“房屋出租系统”使用Hibernate实现用户注册使用hibernate实现房屋信息的增、删、改了解Hibernate基本原理学会编写Hibernate配置文件、实体映射文件学会使用Hibernate完成数据增、删、改操作学会在项目中使用Hibernate本章目标为什么使用Hibernate?在编写DAO层代码时,容易出现哪些问题?思考:这部分代码规律性很强,是否可以采用“通用”的方法“集中”解决?代码繁琐容易出错纯“体力”劳动工作量大占用大量开发时间为什么使用Hibernate?使用Hibernate后的DAO层代码:代码精简易读封装了JDBC操作,以面向对象的方式操作数据开发工作量小,可以将精力集中在业务逻辑的处理上publicclassFwxxDAOHibImplextendsBaseHibernateDAOimplementsFwxxDAO{publicFWXXget(intfwid){super.get(FWXX.class,fwid);}publicvoidadd(FWXXfwxx){super.add(fwxx);}publicvoiddel(intfwid){super.del(FWXX.class,fwid);}publicvoidupdate(FWXXfwxx){super.update(fwxx);}}Hibernate就是用来解决这些问题的什么是Hibernate?Hibernate之父:GavinKing•JBoss核心成员之一•EJB3.0专家委员会成员•《HibernateInAction》作者•2001年开始开发Hibernate•2003年Hibernate发展为Java世界主流持久层框架•充满激情•脾气倔强•永不言败Hibernate是一个优秀的持久化框架什么是持久化?内存姓名:小颖性别:女特长:英语、程序设计瞬时状态磁盘持久状态用JDBC完成数据在持久和瞬时状态间的转换:…stmt.execute(…)...瞬时状态:保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状态持久状态:保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持久状态持久化:将程序数据在瞬时状态和持久状态之间转换的机制持久化Hibernate是一个主流的ORM框架什么是ORM?对象数据(O)name:小颖sex:女skill:英语、程序设计User对象持久化层业务逻辑层表现层数据库TBL_User表关系型数据(R)映射信息类:User表:TBL_User属性字段nameuser_namesexuser_sexskilluser_skillORM(对象-关系映射):完成对象数据到关系型数据映射的机制称为对象-关系映射,简称ORM。小结是一个主流的持久化框架•在JDBC基础上进行封装•只需要少量代码就可以完成持久化工作是一个优秀的ORM(对象-关系映射)机制•通过映射文件保存映射信息•在业务层以面向对象的方式编程,不用考虑数据保存形式使用Hibernate实现用户添加如何使用Hibernate实现“用户添加”功能?使用Hibernate的“3个准备,7个步骤”•准备1:导入Hibernate库(jar包)演示示例:添加Hibernate库到项目使用Hibernate的基本步骤•准备2:添加配置文件--hibernate.cfg.xmlsession-factorypropertyname=connection.urljdbc:microsoft:sqlserver://localhost:1433;Database=zf/propertypropertyname=connection.usernamesa/propertypropertyname=connection.passwordpwd/propertypropertyname=connection.driver_classcom.microsoft.jdbc.sqlserver.SQLServerDriver/propertypropertyname=dialectorg.hibernate.dialect.SQLServerDialect/propertypropertyname=show_sqltrue/propertymappingresource=com/aptech/jb/entity/User.hbm.xml//session-factory配置数据库链接数据库“方言”运行时在控制台显示SQL语句映射文件,可以有多个使用Hibernate的基本步骤•准备3:添加实体类和映射文件(User.hbm.xml)packagecom.aptech.jb.entity;publicclassUserimplementsjava.io.Serializable{privateIntegeruid;privateStringuname;privateStringupass;publicUser(){//默认构造方法}//Getterandsetter}实现Serializable接口添加默认构造方法实体类到表的映射主键属性到字段的映射主键生成器:native–由数据库生成assigned–在程序中指定小结使用Hibernate的三项准备工作是?•添加Hibernate类库•添加Hibernate配置文件•添加对应表的实体类和映射文件Hibernate配置文件中配置了哪些信息?Hibernate使用的实体类和之前定义的实体类有什么区别?使用Hibernate,系统中添加一个表的时候,都有哪些准备工作要做?•添加实体类•添加映射文件•在hibernate.cfg.xml中增加mappingresource=com/aptech/jb/entity/EntityName.hbm.xml/使用Hibernate实现用户添加使用Hibernate的7个步骤:7、关闭Session6、提交事务5、持久化操作save/update/delete/find4、开始一个事务3、打开Session1、Configuration2、创建SessionFactory七个步骤对应的程序代码publicstaticvoidmain(String[]args){Configurationconf=newConfiguration().configure();//1、读取配置文件SessionFactorysf=conf.buildSessionFactory();//2、创建SessionFactorySessionsession=sf.openSession();//3、打开SessionTransactiontx=null;try{tx=session.beginTransaction();//4、开始一个事务//5、持久化操作Useruser=newUser();user.setUname(Hibernateuser);user.setUpass(password);session.save(user);tx.commit();//6、提交事务}catch(Exceptione){if(null!=tx){tx.rollback();}e.printStackTrace();}finally{session.close();//7、关闭Session}}执行结果使用Hibernate实现用户添加Hibernate执行过程ConfigurationSessionFactorySessionTransaction创建创建开始savedeleteupdategettx.commit()session.close()执行Hibernate.cfg.xmlFWXX.cfg.xmlUser.hbm.xml结束创建和销毁都相当耗费资源,通常一个系统内一个数据库只创建一个类似于JDBC中的Connection复杂的查询操作稍后介绍使用Hibernate实现数据的加载/删除/修改程序代码Sessionsession=sf.openSession();Useruser=(User)session.get(User.class,id);session.close();System.out.println(user.getUname()+,+user.getUpass());根据主键加载tx=session.beginTransaction();Useruser=this.testLoad(id);user.setUname(newName);session.update(user);tx.commit();修改tx=session.beginTransaction();Useruser=this.testLoad(id);session.delete(user);tx.commit();删除没有更新数据,不进行事务控制先加载,再更新不再需要繁琐的逐字段编码先加载,再删除演示示例:HibTest2.java小结简述:使用Hibernate的“3个准备,7个步骤”。使用工具简化Hibernate开发使用Hibernate开发虽然简化了开发工作,但还要编写额外的配置文件和映射文件,还是很繁琐!有解决的办法吗?MyEclipse对Hibernate的支持可以进一步简化我们的工作使用工具简化Hibernate开发总结一下,刚才演示过程中,MyEclipse工具帮我们做了哪些事情?1、给项目添加Hibernate支持(自动添加jar包)2、自动生成hibernate.cfg.xml配置文件3、自动生成实体类、映射文件演示示例:使用MyEclipse简化Hibernate开发注意:关键是正确配置了数据库连接信息在项目中使用Hibernate如何在项目中使用Hibernate?重新实现租房系统FwxxDAO接口1、在原项目基础上添加Hibernate支持2、生成TBL_FWXX表对应的实体类和映射文件3、添加com.aptech.jb.dao.hibimpl.FwxxDAOHibImpl类,实现FwxxDAO接口演示示例:使用Hibernate重新实现FwxxDAO接口在项目中使用HibernateFwxxDAOHibImpl中add方法代码如下。下面蓝色的代码和del、update方法的代码存在重复,可以采取什么方法精简呢?publicvoidadd(FWXXitem){Sessionsession=HibernateSessionFactory.getSession();Transactiontx=null;try{tx=session.beginTransaction();session.save(item);tx.commit();}catch(Exceptione){if(null!=tx){tx.rollback();}e.printStackTrace();}finally{session.close();}}在项目中使用Hibernate使用BaseHibernateDAO简化编码publicabstractclassBaseHibernateDAO{protectedvoidadd(Objectitem){Transactiontx=null;Sessionsession=HibernateSessionFactory.getSession();try{tx=s