[计算机软件及应用]Hibernate实用技术课件

PPT
  • 阅读 65 次
  • 下载 0 次
  • 页数 107 页
  • 大小 773.520 KB
  • 2022-12-01 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
[计算机软件及应用]Hibernate实用技术课件
可在后台配置第一页与第二页中间广告代码
[计算机软件及应用]Hibernate实用技术课件
可在后台配置第二页与第三页中间广告代码
[计算机软件及应用]Hibernate实用技术课件
可在后台配置第三页与第四页中间广告代码
[计算机软件及应用]Hibernate实用技术课件
[计算机软件及应用]Hibernate实用技术课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 107
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】[计算机软件及应用]Hibernate实用技术课件.ppt,共(107)页,773.520 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-77056.html

以下为本文档部分文字说明:

程序设计实用技术-Hibernate目标:深入理解持久层框架掌握Hibernate配置方法、开发流程掌握Hiberate性能优化学习对象:具备一定Java编程能力的初级程序员。预备知识:了解数据库的基本概念熟悉常用SQL语

言,具备一定的Java编程能力课程内容:持久层和ORMHibernate基础Hibernate性能优化程序设计实用技术—JAVA方向第一讲持久层和ORM章节目标:理解持久层和ORM持久层概述:什么是持久化?什么是持久层?“持久化”与“持久层”之间的关系?持久层概述:什么是持久

化?将数据保存到物理的储存器(硬盘、磁带等)上的过程叫持久化。什么是持久层?专门负责处理与物理数据相关操作(持久化数据,以供日后使用)的独立层次。之间的关系?持久化是动词,表示将内存中的数据存储到数据库或其他媒介。持久层是名词,实现数据持久化的一个相对独立的领域(层)。消费

者/前端仓库/数据库系统消费者/前端仓库/数据库系统商场/业务类消费者/前端仓库/数据库系统超市/业务类物流公司/持久层现实模型与持久层??Application上层应用层TransactionLayer事务层DataAccessL

ogic数据访问逻辑PersistenceLayer持久层Database数据层持久层逻辑边界???????ViewControlModelJSPAction持久层Database业务逻辑持久层在MVC中:持久层

解决了MVC什么问题?当发生以下三种情况:(1)表示层发生变化(2)业务逻辑层发生变化(3)底层数据格式或持久化机制发生变化数据持久化代码不需要重新编译为什么可以达到上述目标?是什么来的?解耦合持久层概述:什么是解耦合?--采用某种方法将紧密耦合的关系转换为松散耦合的关系

的过程什么是耦合度?--两个事物之间的耦合程度什么是耦合度适中?--事物之间的耦合度符合实际情况或要求紧耦合耦合适中太松耦合持久层概述:现实中还有哪些解耦合的实例?电脑,各个组件(显示器、CPU、硬盘、内存)之间相互独立,组合在一起又能一起工作,连接它们的是共同实现

的标准接口;(思考集成显卡、网卡?)电脑上的USB接口与原来的串口之间存在耦合度区别;建筑中的砖混结构、框架结构;社会上各行各业的产生,也是一种解耦合的过程。发电厂的建立,使工厂不必为了开动机器去发电;工程化也可以说就是一个解耦合的过程。。。。。。。现实中的解耦合的实例:持久层概述:软件设计中解耦

合的自然进化实例:记录论坛用户登录次数publicbooleanaddLoginCount(Stringid,intcount){Connectionconn=null;Statementstmt=null;t

ry{Class.forName(“oracle.jdbc.driver.OracleDriver”);conn=DriverManager.getConnection(“jdbc:orcle:thin:@dbSe

rver:1521:forum”,“MyUserName”,“MyPassword”);StringsqlStr=“updateBBSUsersetloginCount=loginCount+1”+“w

hereid=’”+id+”’”;stmt=conn.createStatement();returnstmt.execute(sqlStr);}catch(ClassNotFoundExceptione){e

.printStackTrace();}…}publicbooleanaddLoginCount(Stringid,intcount){Connectionconn=null;Statementstmt=

null;try{Class.forName(Config.getValue(“JDBC_DRIVER”));conn=DriverManager.getConnection(Config.getValue(“

DB_URL”),Config.getValue(“DB_USER”),Config.getValue(“DB_PWD”));StringsqlStr=“updateBBSUsersetloginCount=loginCo

unt+1”+“whereid=’”+id+”’”;stmt=conn.createStatement();returnstmt.execute(sqlStr);}catch(ClassNotFoundExc

eptione){e.printStackTrace();}…}实例:记录论坛用户登录次数从编写代码的角度看他们的优点:(1)第一段代码很容易掌握,容易理解,直截了当,可以很好的执行。(2)第二段代码要引入一个外部文件,用来保存数据库连接信息,不大容易实现,但也比较好理解,也

可以很好的执行。从耦合度的角度看,比较其优缺点?如数据库密码泄露,管理员要修改数据库密码:第一段代码:(1)找到所有的与数据库连接相关的代码,修改密码;(2)重新编译修改后的文件;(3)重新部署软件。第二段代码:(1)修改外部文件中配置的密码;(2)不需要重新

编译;(3)不需要重新部署软件。进一步改进的方法?Connectionconn=DBHelper.getConnection();再进一步改进的方法????软件设计中解耦合的目标为什么要解耦合?从MVC理解软件设计中的解耦合软件系统解耦合

的目标:数据访问操作系统数据库系统应用系统应用逻辑应用程序层内部解耦合?业务逻辑与数据访问逻辑分离应用程序与资源层解耦合?应用层逻辑与底层数据库、操作系统结构分离程序设计实用技术—JAVA方向第二讲DAO

模式解耦合解耦合实例:DAO模式示例:银行转帐现有{账户A}{账户B}{转帐金额amount}由{账户A}转给{账户B}。编写一个方法,实现转帐。publicbooleanzhuanzhang(String

user1,Stringuser2,intamount){Connectionconn=DBHelper.getConnection();//获得数据库连接PrearedStatementstmt=conn.prepareStatement

(“select*fromuserwhereusername=?”);stmt.setString(1,user1);ResultSetuser1_Set=stmt.executeQuery();if(u

ser1_Set.next()){//检查{账户A}余额是否够转帐,够则减掉要转帐的金额if(user1_Set.getInt(“amount”)>=amount){PrearedStatementstmt

=conn.prepareStatement(“updateusersetamount=amount-“&amount&”+“whereusername=?”);stmt.executeUpdate();}else{re

turnfalse;//余额不足}}else{returnfalse;//找不到{账户A}}//将{账户B}加上转帐金额PrearedStatementstmt=conn.prepareStatement(“updateusersetamount=amount+”&amou

nt&”whereusername=?”);stmt.setString(1,user2);stmt.executeUpdate();returntrue;}示例:银行转帐上例实现了三个操作:(1)检查{账户A}的余额是否

够转帐;(2)在{账户A}中减掉要转帐的金额;(3)在{账户B}中加上要转帐的金额。最后DAO模式下的代码:publicbooleanzhuanzhang(Stringuser1,Stringuser2,intamount){User

userA=UserProxy.getUser(user1);//分离数据访问逻辑UseruserB=UserProxy.getUser(user2);returnuserA.accord(userB,amount);}Factory模式Proxy模式DAO模

式:DataAccessorObject(数据访问对象DAO)Data数据DataAccessor数据访问器DomainObject领域对象(数据抽象)DAO模式分解DAO模式解耦合的目标:Application应用逻辑DataAccessor数据访问抽象DomainObj

ect业务对象DatabaseAccessorAbstract数据访问接口DatabaseAccessorImp数据访问实现DAO模式实现的层次数据存储逻辑与业务逻辑分离数据存储逻辑与数据底层实现分离(资源层解耦合)封装业务对象Database在DAO模式中引入Factory模式:如何理解Fact

ory工厂模式?根据给定的模具(类名称),从仓库里取出相应原料(类代码),加工成产品(类实现或对象)。Factory模式:Factory模式:UserDAOuserDAO=DAOFactory.getDA

O(UserDAO.class);UseruserA=userDAO.getUser(User1);Factory在DAO的作用?根据需要加载相应的实现,具体点说就是:给定UserDAO.class类名,产生UserDAO类实现。之前的实现完成银行转帐:publicbool

eanzhuanzhang(Stringuser1,Stringuser2,intamount){UserDAOuserDAO=DAOFactory.getDAO(UserDAO.class);UseruserA=UserDAO.getUser(user1);UseruserB=UserD

AO.getUser(user2);returnuserA.accord(userB,amount);}最终版本现实生活中的Proxy代理?软件开发中的Proxy代理?在DAO模式中引入Proxy模式在DAO模式中引入Proxy模式publicclas

sUserProxy{publicstaticUsergetUser(Stringuserid){UserDAOuserDAO=(UserDAO)DAOFactory.getDAO(UserDAO.class);returnus

erDAO.getUser(userid);}publicstaticvoidsava(Useruser){UserDAOuserDAO=(UserDAO)DAOFactory.getDAO(UserDAO.class);userDAO.save(use

r);}}最终版本为什么要引入Proxy?1、使得代码看起来更整洁2、为附加其他功能留接口3、???为什么要引入Proxy?思考类比房屋建筑中的代理层?最终版本DAO模式总结:ClientDAOFactoryUserDAOUserObjectUse

rProxyUserData/TableDBHelper应用层数据访问层数据层对象/关系映射DAO模式总结:对象描述Client业务逻辑,相对与数据库层来说是客户UserProxy执行代理,执行业务逻辑需要的针对数据库的操作DAOFactor

yDAO工厂,根据配置文件产生DAO对象类UserDAODAO对象,使用DBHelper连接数据库,加载数据/实例化DAODBHelper连接数据库帮助类,使用配置文件连接数据库UserObject数据封装类,

具有属性和get/set方法,对表/关系数据进行封装UserDate/Table数据库表,表记录是UserObject的属性,实例化UserObjectDAO模式总结:ClientObject/业务逻辑DAOProxy/代理DAOFactory/

DAO工厂Implementation/DAO实现DAOConfiguration调用服务方法获得服务实现接口获得DAO配置获得DAO/服务实现执行方法返回结果(1)interface接口,在实现解耦合中的作用?(2)JavaClass动态加栽?(3)XML配置文件?回顾与DAO相关的

知识:提升持久层性能软件系统中有哪些性能指标?提升持久层性能:数据库容量执行某次业务的时间同时并发访问数等等…软件系统中有哪些性能指标?系统性能低下有哪些原因?提升持久层性能:硬件环境、网络环境差软件配置环境低(操作系统、数据库系统)达不到系统使用要求设计本身存在

缺陷系统性能低下有哪些原因?设计本身存在缺陷,主要表现在:1、算法不科学合理2、资源的管理和调配失当哪一个是最主要因素?提升持久层性能:从前有一个钢铁工厂,有100个车间,每个车间的生产效率都很高(工人技能高

、生产管理科学、设备先进);每个车间都设立有自己的原料采购车队,以保障生产所需的原料。(存在的问题?如何解决?)提升持久层性能:从前有一个DAO模式的系统,有100个子过程,每个子过程的执行效率都很高(代码非常简练,并经过代码优化);每个子过程都包含有自己的数据

库连接,以保障有效的数据存取。(存在的问题?如何解决?)提升持久层性能:问题出现的前提:“大量”提升持久层性能:市场对钢铁的需求“大量”增长用户同时登陆的数量“大量”增长会出现什么大问题?提升持久层性能:措施1:Connec

tionPool/数据库连接池请求获得连接数据库连接池判断是否有有没有创建一个连接移除返回连接提升持久层性能:ConnectionPool/数据库连接池请求返回连接数据库连接池判断是否满满不满加入到池中关闭连接提升持久层性能:数据库连接池技术带

来的优势?(1)资源重用(2)更快的响应速度(3)控制资源分配(4)避免连接泄露提升持久层性能:措施2:缓存计算机领域的缓存有哪些?缓存什么东西?为什么要缓存?缓存到什么地方?软件系统中的缓存主要缓存什么?提升持久层性能总结回顾:1、数据库连接池引入的原因?提升系统

性能。2、数据库连接池与持久层的关系?持久层负责数据访问。数据库连接池负责统一管理和调度数据库连接。有了数据库连接才能访问数据。提升持久层性能:理解持久层、DAO、数据库连接池这些概念的目的是什么?是:对现有持久层来历和发展方向有深入的理

解,为应用开发打下理论基础。不是:使用这些理论知识实现软件项目中的持久层。因为:不必为了吃面包,就要去种小麦。无论是商业领域还是开源社区,都为我们提供了丰富的、久经考验的持久层组件,比如Hiberna

te。程序设计实用技术—JAVA方向第三讲Hibernate基础开发回顾现有持久层框架:HibernateApacheOJBCayenneJaxoriBatisjRelationFrameworkmirag

eSMYLETopLink(oracle,非开源产品)Hibernate是什么:持久层框架?ORM映射理论?提供强大、高性能的对象到关系型数据库持久化服务的框架产品(开源)Hibernate的起源:Hibernate的设计

者:GavinKing2001年末,正式发布第一个版本2003年中,发布Hibernate22003年末,Hibernate被开源组织JBoss收纳2005年初,发布Hibernate3为什么如此快速的成功:快速发布、即时响应全面的回归测试避免过渡设计集权文档避免标准

化5分钟内成功运行Hibernate开发人员的责任感快速起步快速起步-准备工作:下载:HibernateHibernate-ExtensionMiddlegen-HibernateJUnitMysql准备开发工具:Eclips

eMyEclipse4准备数据库环境:Mysql/OracleHibernate配置:Hibernate日志:第一程序:代码解释:(1)初始化Hibernate配置管理类:Configuration。(2)通过Configuration类实例创建Session的工厂类:Sess

ionFactory。(3)通过SessionFactory得到:Session。图释:Hibernatehibernate.hbm.xmlSessionFactorySessionDatabaseConfi

guration理解:Hibernate完成了什么配置工作?如何完成的?Hibernate在数据操作中起到了什么作用?如何做的?基础语法ConfigurationSessionFactorySessionhibernate.hbm.

xmlhibernate.properties(myHibernate.hbm.xml)Session.save(user)Session.close()User.hbm.xmlHIBERNATE基础语法:Configuration类--负责管理Hibernate的配置信息Conf

igurationconfig=newConfiguration().configure();Filefile=newFile(“D:\\ora\\myHibernate.hbm.xml”);Configurationconfig=newConfigur

ation().configure(file);基础语法:SessionFactory类--负责创建Session实例。--是线程安全的,可并发同时访问。Configurationconfig=newConfigur

ation().configure();SessionFactoryfactory=config.buildSessionFactory();基础语法:SessionFactory类--SessionFactory实例是Configuration实例config根据当前的配

置信息构造的。--多个数据库就有多个config实例,并构造不同的SessionFactory。--SessionFactory中保存着数据库配置的所有映射关系,也维护缓存等,消耗巨大,应重点考虑重用策略。基础语法:Session类--持久化操作的基

础Configurationconfig=newConfiguration().configure();SessionFactoryfactory=config.buildSessionFactory();Sessionsession=factory.openSession();

基础语法:HibernateSession与HttpSession的区别?基础语法:Session数据持久化方法:SaveGet/LoadflushDeleteQuery、Criteria基础配置基础配置:Hibernate基础配置--主要针对SessionFa

ctory展开Hibernate内部配置与应用服务器(或容器)的相关配置基础配置:Hibernate配置方法--主要针对SessionFactory展开使用配置文件(hibernate.hbm.xml/hibernate.properti

es),在Hibernate启动时加栽配置属性。使用Configuration类在程序中,指定配置属性。基础配置:Hibernate配置属性分类:数据库连接数据库连接池事务属性对象/关系映射文件其他属性Hib

ernateO/RMappingHibernateO/RMapping?HibernateO/RMapper?基本数据类型映射:Java数据类型数据库字段类型O/R映射定义Hibernate类型转换基本实体映射:Java对象

与数据库表关系之间的映射:类名――表名主键映射字段――属性基本数据类型映射:Java对象/POJO数据库表/关系O/R映射定义Hibernate数据交换基本实体映射:Idint(pk)Namevarchar(20)sexvarchar(4)group_idint(fk)学生

表Idint(pk)Codevarchar(50)createTimetime学生证表privateintid;privateStringname;privateStringsex;privateintgroup;Cardcard;Studentprivateintid;

privateStringcode;privatetimecreatetimeStudentstudent;Card自定义数据类型映射:Hibernate自定义数据类型,接口:UserTypeCompositeUserType将数据库中复杂的数据格式转换成

业务层易于操作的类型对象复合主键映射:注意:有驳于业务逻辑和数据逻辑分离的原则复合主键类:基于实体类属性的复合主键基于主键类的复合主键需要实现:Serializable接口及equals、hashCode方法Blob、Clob字段

映射:不同的数据库对应的大对象类型不同实体映射策略:Component组件映射继承映射Component组件映射:idintfirstNamevchar(20)lastNamevchar(20)sexintag

einthomeAddvchar(100)officeAddvchar(100)telZonevchar(4)telPhonevchar(11)telPersonvchar(4)…Name对象Tel对象通过将复杂的表字段分类,

实现面向对象的领域划分,使系统逻辑更加清晰。继承映射:学生表id姓名性别年龄班级老师表id姓名性别年龄职务Person类Student类Teacher类继承映射:用户表id姓名性别年龄班级学生表idPerson类Student类Teacher类老师表id职务继承映射:用户表id

姓名性别年龄班级用户类别Person类Student类Teacher类职务级联关系关系映射类别:一对一关联/one-to-one一对多关联/one-to-many多对一关联/many-to-one多对多关联/many-to-many-

-ORM(对象/关系映射),不但包括对单独的数据库表和对象的映射,还包括对表之间的关联的影射。一对一关联:主键关联Idint(pk)Namevarchar(20)sexvarchar(4)group_idint(fk)学生表Idint(pk)Codevarchar

(50)createTimetime学生证表privateintid;privateStringname;privateStringsex;privateintgroup;Cardcard;Studentprivateintid;privateS

tringcode;privatetimecreatetimeStudentstudent;Card一对一关联:外键关联Idint(pk)Namevarchar(20)sexvarchar(4)group_idint(fk)学生表Idint(pk)na

mevarchar(50)组表privateintid;privateStringname;privateStringsex;privateGroupgroup;Studentprivateintid;privateStringnam

e;GroupStudent.hbm.xmlGroup.hbm.xml一对多关联:Idint(pk)Namevarchar(20)sexvarchar(4)group_idint(fk)学生表Idint(pk)addressvarchar(50)

zipcodevarchar(6)useridint地址表privateintid;privateStringname;privateStringsex;privateGroupgroup;privateSetaddress;Studentprivateintid;privat

eStringaddress;privateStringzipcode;privateintuserid;privateStudentstudent;AddressStudent.hbm.xmlAddress.hbm.xml多对

多关联:Idint(pk)rolevarchar(20)角色表Idint(pk)groupvarchar(20)组(岗位)表privateintid;privateStringrole;privateSetgroups;Roleprivateintid;

privateStringgroup;privateSetroles;GroupRole.hbm.xmlGroup.hbm.xmlRole_idGroup_id角色_组表

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?