[计算机软件及应用]Hibernate实用技术课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]Hibernate实用技术课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 Hibernate 实用技术 课件
- 资源描述:
-
1、程序设计实用技术程序设计实用技术 -Hibernate-Hibernate 目标:目标:n深入理解持久层框架深入理解持久层框架n掌握掌握HibernateHibernate配置方法、开发流程配置方法、开发流程n掌握掌握HiberateHiberate性能优化性能优化学习对象:具备一定具备一定JavaJava编程能力的初级程序员。编程能力的初级程序员。预备知识:n了解数据库的基本概念了解数据库的基本概念n熟悉常用熟悉常用SQLSQL语言,具备一定的语言,具备一定的JavaJava编编程能力程能力课程内容:n持久层和持久层和ORMORMnHibernateHibernate基础基础nHiberna
2、teHibernate性能优化性能优化程序设计实用技术程序设计实用技术JAVAJAVA方向方向 第一讲第一讲持久层和ORM章节目标:章节目标:理解持久层和理解持久层和ORMORM持久层概述:持久层概述:什么是什么是持久化持久化?什么是什么是持久层持久层?“持久化持久化”与与“持久层持久层”之间的之间的关系关系?持久层概述:持久层概述:什么是持久化?什么是持久化?将数据保存到物理的储存器(硬盘、磁带将数据保存到物理的储存器(硬盘、磁带等)上的过程叫持久化。等)上的过程叫持久化。什么是持久层?什么是持久层?专门负责处理与物理数据相关操作(持久化专门负责处理与物理数据相关操作(持久化数据,以供日后使
3、用)的独立层次。数据,以供日后使用)的独立层次。之间的关系?之间的关系?持久化是动词,表示将内存中的数据存储到持久化是动词,表示将内存中的数据存储到数据库或其他媒介。数据库或其他媒介。持久层是名词,实现数据持久化的一个相对持久层是名词,实现数据持久化的一个相对独立的领域(层)。独立的领域(层)。消费者消费者/前前端端仓库仓库/数据库系统数据库系统消费者消费者/前前端端仓库仓库/数据库系统数据库系统商场商场/业务类业务类消费者消费者/前前端端仓库仓库/数据库系统数据库系统超市超市/业务类业务类物流公司物流公司/持久层持久层现实模型与持久层现实模型与持久层?Application上层应用层上层应用
4、层Transaction Layer 事务层事务层Data Access Logic 数据访问逻辑数据访问逻辑Persistence Layer 持久层持久层Database 数据层数据层持久层逻辑边界?ViewControlModelModelJSPAction持久层持久层Database业务逻辑业务逻辑持久层在持久层在MVCMVC中:中:持久层解决了持久层解决了MVC什么问题?什么问题?当发生以下三种情况:当发生以下三种情况:(1 1)表示层发生变化)表示层发生变化(2 2)业务逻辑层发生变化)业务逻辑层发生变化(3 3)底层数据格式或持久化机制发生变化)底层数据格式或持久化机制发生变化数
5、据数据持久化代码持久化代码不需要重新编译不需要重新编译 为什么可以达到上述目标?是什么来的?为什么可以达到上述目标?是什么来的?解耦合解耦合持久层概述:持久层概述:什么是解耦合?什么是解耦合?采用某种方法将紧密耦合的关采用某种方法将紧密耦合的关系转换为松散耦合的关系的过程系转换为松散耦合的关系的过程 什么是耦合度?什么是耦合度?两个事物之间的耦合程度两个事物之间的耦合程度什么是耦合度适中?什么是耦合度适中?事物之间的耦合度符合实际情况事物之间的耦合度符合实际情况或要求或要求 紧耦合耦合适中太松耦合持久层概述:持久层概述:现实中还有哪些解耦合的实例?现实中还有哪些解耦合的实例?电脑电脑,各个组件
6、(显示器、,各个组件(显示器、CPUCPU、硬盘、内存)之间、硬盘、内存)之间相互独立,组合在一起又能一起工作,连接它们的是相互独立,组合在一起又能一起工作,连接它们的是共同实现的标准接口;(思考集成显卡、网卡?)共同实现的标准接口;(思考集成显卡、网卡?)电脑上的电脑上的USBUSB接口与原来的串口之间存在耦合度区别;接口与原来的串口之间存在耦合度区别;建筑中的砖混结构、框架结构;建筑中的砖混结构、框架结构;社会上各行各业的产生,也是一种解耦合的过程。发社会上各行各业的产生,也是一种解耦合的过程。发电厂的建立,使工厂不必为了开动机器去发电;电厂的建立,使工厂不必为了开动机器去发电;工程化也可
7、以说就是一个解耦合的过程工程化也可以说就是一个解耦合的过程。现实中的解耦合的实例:现实中的解耦合的实例:持久层概述:持久层概述:软件设计中解耦合的自然进化软件设计中解耦合的自然进化 实例:记录论坛用户登录次数实例:记录论坛用户登录次数public boolean addLoginCount(String id,int count)Connection conn=null;Statement stmt=null;try Class.forName(“oracle.jdbc.driver.OracleDriver”);conn=DriverManager.getConnection(“jdbc:o
8、rcle:thin:dbServer:1521:forum”,“MyUserName”,“MyPassword”);String sqlStr=“update BBSUser set loginCount=loginCount+1”+“where id=”+id+”;stmt=conn.createStatement();return stmt.execute(sqlStr);catch(ClassNotFoundException e)e.printStackTrace();public boolean addLoginCount(String id,int count)Connection
9、 conn=null;Statement stmt=null;try Class.forName(Config.getValue(“JDBC_DRIVER”);conn=DriverManager.getConnection(Config.getValue(“DB_URL”),Config.getValue(“DB_USER”),Config.getValue(“DB_PWD”);String sqlStr=“update BBSUser set loginCount=loginCount+1”+“where id=”+id+”;stmt=conn.createStatement();retu
10、rn stmt.execute(sqlStr);catch(ClassNotFoundException e)e.printStackTrace();实例:记录论坛用户登录次数实例:记录论坛用户登录次数从编写代码的角度看他们的优点:从编写代码的角度看他们的优点:()第一段代码很容易掌握,容易理()第一段代码很容易掌握,容易理解,直截了当,可以很好的执行。解,直截了当,可以很好的执行。()第二段代码要引入一个外部文件,()第二段代码要引入一个外部文件,用来保存数据库连接信息,不大容易实现,用来保存数据库连接信息,不大容易实现,但也比较好理解,也可以很好的执行。但也比较好理解,也可以很好的执行。从
11、耦合度的角度看,比较其优缺点?从耦合度的角度看,比较其优缺点?如数据库密码泄露,管理员要修改数据库如数据库密码泄露,管理员要修改数据库密码密码:第一段代码:第一段代码:()找到所有的与数据库连接相关的代码,修()找到所有的与数据库连接相关的代码,修改密码;改密码;()重新编译修改后的文件;()重新编译修改后的文件;()重新部署软件。()重新部署软件。第二段代码:第二段代码:()修改外部文件中配置的密码;()修改外部文件中配置的密码;()不需要重新编译;()不需要重新编译;()不需要重新部署软件。()不需要重新部署软件。进一步改进的方法?进一步改进的方法?Connection conn=DBHe
12、lper.getConnection();再进一步改进的方法?再进一步改进的方法??软件设计中解耦合的目标软件设计中解耦合的目标 为什么要解耦合?为什么要解耦合?从从MVCMVC理解软件设计中的解耦合理解软件设计中的解耦合软件系统解耦合的目标:软件系统解耦合的目标:数据访问数据访问操作系统操作系统数据库系统数据库系统应用系统应用系统应用逻辑应用逻辑应用程序层内部解耦合?应用程序层内部解耦合?业务逻辑与数据访问逻辑分离业务逻辑与数据访问逻辑分离应用程序与资源层解耦合?应用程序与资源层解耦合?应用层逻辑与底层数据库、操作系统结构分离应用层逻辑与底层数据库、操作系统结构分离程序设计实用技术程序设计实
13、用技术JAVAJAVA方向方向 第二讲第二讲DAO模式解耦合解耦合实例解耦合实例 :DAODAO模式模式 示例:银行转帐示例:银行转帐 现有现有账户账户A A账户账户B B转帐金额转帐金额amountamount由账户由账户A A转给账户转给账户B B。编写一个方法,实现转帐。编写一个方法,实现转帐。public boolean zhuanzhang(String user1,String user2,int amount)Connection conn=DBHelper.getConnection();/获得数据库连接获得数据库连接PrearedStatement stmt=conn.pre
14、pareStatement(“select*from user where username=?”);stmt.setString(1,user1);ResultSet user1_Set=stmt.executeQuery();if(user1_Set.next()/检查账户检查账户A余额是否够转帐,够则减掉要转帐的金额余额是否够转帐,够则减掉要转帐的金额if(user1_Set.getInt(“amount”)=amount)PrearedStatement stmt=conn.prepareStatement(“update user set amount=amount-“&amount
15、&”+“where username=?”);stmt.executeUpdate();elsereturn false;/余额不足余额不足elsereturn false;/找不到账户找不到账户A/将账户将账户B加上转帐金额加上转帐金额PrearedStatement stmt=conn.prepareStatement(“update user set amount=amount+”&amount&”where username=?”);stmt.setString(1,user2);stmt.executeUpdate();return true;示例:银行转帐示例:银行转帐 上例实现了
16、三个操作:上例实现了三个操作:()检查账户()检查账户A A的余额是否够转帐;的余额是否够转帐;()在账户()在账户A A中减掉要转帐的金额;中减掉要转帐的金额;()在账户()在账户B B中加上要转帐的金额。中加上要转帐的金额。最后最后DAODAO模式下的代码:模式下的代码:public boolean zhuanzhang(String user1,String user2,int amount)User userA=UserProxy.getUser(user1);/分离数据访问逻辑分离数据访问逻辑User userB=UserProxy.getUser(user2);return use
17、rA.accord(userB,amount);Factory模式模式Proxy模式模式DAODAO模式:模式:Data Accessor Object(数据访问对象数据访问对象DAO)Data 数据数据Data Accessor 数据访问器数据访问器Domain Object 领域对象领域对象(数据抽象数据抽象)DAO模式分解DAODAO模式解耦合的目标:模式解耦合的目标:Application 应用逻辑应用逻辑Data Accessor 数据访问抽象数据访问抽象Domain Object业务对象业务对象Database Accessor Abstract 数据访问接口数据访问接口Datab
18、ase Accessor Imp 数据访问实现数据访问实现DAO模式实现的层次模式实现的层次数据存储逻辑与业务逻辑分离数据存储逻辑与业务逻辑分离数据存储逻辑与数据底层实现数据存储逻辑与数据底层实现分离(资源层解耦合)分离(资源层解耦合)封装业务对象封装业务对象Database在在DAODAO模式中引入模式中引入FactoryFactory模式:模式:如何理解如何理解FactoryFactory工厂模式?工厂模式?根据给定的模具(根据给定的模具(类名称类名称),),从仓库里取出相应原料(从仓库里取出相应原料(类代码类代码),),加工成产品(加工成产品(类实现或对象类实现或对象)。)。Factor
19、yFactory模式:模式:FactoryFactory模式:模式:UserDAO userDAO=DAOFactory.getDAO(UserDAO.class);User userA=userDAO.getUser(User1);FactoryFactory在在DAODAO的作用?的作用?根据需要加载相应的实现,具体点说就是:根据需要加载相应的实现,具体点说就是:给定给定UserDAO.classUserDAO.class类名,产生类名,产生UserDAOUserDAO类实现。类实现。之前的实现之前的实现完成银行转帐:完成银行转帐:public boolean zhuanzhang(Str
20、ing user1,String user2,int amount)UserDAO userDAO=DAOFactory.getDAO(UserDAO.class);User userA=UserDAO.getUser(user1);User userB=UserDAO.getUser(user2);return userA.accord(userB,amount);最终版本最终版本现实生活中的现实生活中的ProxyProxy代理?代理?软件开发中的软件开发中的ProxyProxy代理?代理?在在DAODAO模式中引入模式中引入ProxyProxy模式模式 在在DAODAO模式中引入模式中引入
21、ProxyProxy模式模式 public class UserProxy public static User getUser(String userid)UserDAO userDAO=(UserDAO)DAOFactory.getDAO(UserDAO.class);return userDAO.getUser(userid);public static void sava(User user)UserDAO userDAO=(UserDAO)DAOFactory.getDAO(UserDAO.class);userDAO.save(user);最终版本最终版本为什么要引入为什么要引入P
22、roxy?、使得代码看起来更整洁、使得代码看起来更整洁、为附加其他功能留接口、为附加其他功能留接口、?、?为什么要引入为什么要引入Proxy?思考类比房屋建筑中的代理层?思考类比房屋建筑中的代理层?最终版本最终版本DAODAO模式总结:模式总结:ClientDAOFactoryUserDAOUserObjectUserProxyUserData/TableDBHelper应用层应用层数据访问层数据访问层数据层数据层对象对象/关系映射关系映射DAODAO模式总结:模式总结:对象对象描述描述Client业务逻辑,相对与数据库层来说是客户UserProxy执行代理,执行业务逻辑需要的针对数据库的操作
23、DAOFactoryDAO工厂,根据配置文件产生DAO对象类UserDAODAO对象,使用DBHelper连接数据库,加载数据/实例化DAODBHelper连接数据库帮助类,使用配置文件连接数据库UserObject数据封装类,具有属性和get/set方法,对表/关系数据进行封装UserDate/Table数据库表,表记录是UserObject的属性,实例化UserObjectDAODAO模式总结:模式总结:Client Object/Client Object/业务逻辑业务逻辑DAOProxyDAOProxy/代理代理DAOFactoryDAOFactory/DAO/DAO工厂工厂Imple
24、mentation/DAOImplementation/DAO实现实现DAOConfiguration调用服务方法获得服务实现接口获得DAO配置获得DAO/服务实现执行方法返回结果(1 1)interfaceinterface接口,在实现解耦合中的作用?接口,在实现解耦合中的作用?(2 2)Java ClassJava Class动态加栽?动态加栽?(3 3)XMLXML配置文件?配置文件?回顾与回顾与DAODAO相关的知识:相关的知识:提升持久层性能提升持久层性能软件系统中有哪些性能指标?软件系统中有哪些性能指标?提升持久层性能:提升持久层性能:数据库容量数据库容量执行某次业务的时间执行某次
25、业务的时间同时并发访问数同时并发访问数等等等等 软件系统中有哪些性能指标?软件系统中有哪些性能指标?系统性能低下有哪些原因?系统性能低下有哪些原因?提升持久层性能:提升持久层性能:硬件环境、网络环境差硬件环境、网络环境差软件配置环境低(操作系统、数据库软件配置环境低(操作系统、数据库系统)达不到系统使用要求系统)达不到系统使用要求设计本身存在缺陷设计本身存在缺陷系统性能低下有哪些原因?系统性能低下有哪些原因?设计本身存在缺陷,主要表现在:设计本身存在缺陷,主要表现在:、算法不科学合理、算法不科学合理、资源的管理和调配失当、资源的管理和调配失当哪一个是最主要因素?哪一个是最主要因素?提升持久层性
展开阅读全文