第1章Hibernate基础(理论).ppt_第1页
第1章Hibernate基础(理论).ppt_第2页
第1章Hibernate基础(理论).ppt_第3页
第1章Hibernate基础(理论).ppt_第4页
第1章Hibernate基础(理论).ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章Hibernate基础,课程地位,本章内容,持久层与持久层框架 ORM介绍 Hiberante框架 Hibernate的基本配置管理 Hibernate对基本数据库的操作,本章目标,熟悉应用程序的分层体系结构 了解O/R Mapping原理 掌握Hibernate的基本配置 掌握使用Hibernate实现增、删、改、查 运用MyEclipse工具开发Hibernate,1. 应用程序的分层结构,单层结构与双层结构已经不能满足应用的需求 单层结构与双层结构将视图、控制及业务混合在一起,导致: 程序结构不清晰 可维护性差 可扩展性差,1.1 为什么需要分层,1.2 典型的软件分层结构,三层结

2、构是如今最为典型的一种应用软件分层结构,其三层分别为: 表述层:提供与用户交互的界面,主要包括图形用户界面GUI及Web页面 业务逻辑层:主要负责解决、实现特定业务领域的需求 数据层:对应用的业务数据进行存储与管理,1.3 软件层次的特征,软件的分层必须符合以下的特征 重用:每层均向其上层的对象提供服务,使添加附加功能更快捷 封装:每层向其他层隐藏其内部实现细节。当其中一层发生变化时,只要API不变,就不会影响其他层 分隔:每层着重于其自身的系列职能,使系统更易于管理,1.4 软件分层的优缺点,恰当地为软件分层,将给应用程序带来以下优点: 伸缩性 可维护性 可扩展性 可重用性 可管理性 软件的

3、分层也存在一些缺点: 分层越多对软件设计者的要求也越高 层次的增加会使调试变得麻烦,2. 持久层,为了将数据库访问细节与业务逻辑分开,可以把数据访问独立出来作为持久层,重新进行分层,2.1 为什么需要持久层,2.2 什么是持久层,所谓“持久层”,是指在系统逻辑层面上,专著于实现数据持久化的一个相对独立的领域(Domain) 一个完善的持久化层应该能达到以下目标: 代码的可重用性高,能完成所有数据库的访问操作 可以支持多种数据库平台 具有相对独立性,当持久层的实现发生变化时,不影响上层的实现,2.3 什么是持久化,狭义的理解,“持久化” 指将域对象永久保存至数据库中 广义的理解,“持久化”包括与

4、数据库相关的各种操作 保存:将域对象永久保存至数据库中 更新:更新数据库中域对象的状态 删除:从数据库中删除一个域对象 加载:根据特定的OID,将一个域对象从数据库加载至内存 查询:根据特定的查询条件,将符合查询条件的一个或多个域对象从数据库加载至内存,3. ORM,ORM就是通过描述对象与数据库之间映射的元数据,自动(且透明)地将Java应用程序中的对象持久化至关系数据库中的表 ORM本质上是将数据从一种表示法(可逆)转换为另一种表示法进行工作,3.1 什么是ORM,3.2 ORM是为了解决什么样的问题,ORM解决的主要问题就是对象-关系的映射,对应关系见下表,小结,三层结构是如今最为典型的

5、一种应用软件结构 持久层就是在系统逻辑层面上,专著于实现数据持久化的一个相对独立的领域(Domain) ORM解决的主要问题就是对象-关系的映射 持久层与持久化有什么区别? 面向对象概念与面向关系概念的对应关系是怎样的?,4. Hibernate简介,Hibernate作为中间件,能为任何需要访问关系型数据库的Java应用服务,4.1 为什么需要使用Hibernate,Hibernate不与特定的业务领域相关,能够将任意Java应用与数据库系统连接,是一种中间件,4.2 什么是Hibernate,Hibernate是一个开放源代码的对象关系映射框架,通过对JDBC进行了轻量级的对象封装,使Ja

6、va程序员能随心所欲的使用面向对象的编程思维来操作数据库 Hibernate的工作原理,5. Hibernate准备,准备数据库环境(本门课程使用MySQL数据库) 准备开发工具(推荐使用MyEclipse5.5及以上版本) 准备数据库的驱动程序 准备Hibernate包(MyEclipse5.5及以上版本自带 ),5.1 准备软件开发环境,5.2 创建数据库,创建数据库脚本代码,/*=*/ /* Table: ACCOUNT */ /*=*/ create table ACCOUNT ( ACCOUNT_ID int not null auto_increment, USER_NAME va

7、rchar(20), PASSWORD varchar(20), IS_ACT int, primary key (ACCOUNT_ID) ) comment = “用户帐号;,5.3 创建持久化类,ACCOUNT表对应的实体类的命名为Account,该实体类称为POJO, POJO是作为数据实体的对象化表现形式,即实体类,public class Account implements java.io.Serializable private Integer accountId;/帐号ID private String userName;/帐号名称 private String passwor

8、d;/帐号密码 private Integer isAct;/帐号禁用状态 / Constructors /* default constructor */ public Account() / Getter and setter ,实现序列化,省略get/set方法,5.4 创建映射文件,映射文件是用于定义持久数据以及在需要时保存关于对象的持久域、关联、子类及代理的XML文档。对于每个持久对象及以名称class_name.hbm.xml保存的文件,都需要创建一个映射文档。在class_name.hbm.xml中,class_name即对象的类名, ,实体对象全路径名称,表名,实体标识到主键的

9、映射,主键的增长方式,属性到字段的映射,创建映射文件,id 元素映射值类型属性 (5) (1)name (可选) :标识属性的名称 (2)type(可选):标识Hibernate类型的名称 (3)column(可选,默认为属性名):对应数据库表的主键字段的名称 (4)unsaved-value(可选,默认为null):其值用于判断对象是否需要保存 (5)generator:子元素用于设定标识符生成器,创建映射文件,Hibernate提供了多种内置的设定标识符生成器,创建映射文件,property元素映射值类型属性 name属性:指定持久化类的属性的名称 type属性:指定Hibernate映射

10、类型。Hibernate映射类型是Java类型与SQL类型的桥梁 column属性:指定与类的属性映射的表的字段名 update:默认为true,指定在update时是否进行更新 insert:默认为true,指定在insert时是否进行插入 not-null:默认为false,指定属性是否为空,6. Hibernate配置,6.1 创建配置文件hibernate.cfg.xml, root jdbc:mysql:/localhost:3306/erp org.hibernate.dialect.MySQLDialect ERPDB 000000 com.mysql.jdbc.Driver ,

11、配置数据库连接,数据库方言,加载映射文件,Hibernate配置,Hibernate属性,小结,Hibernate的软件开发环境 映射文件的内容 配置文件的内容 主键增长方式包括哪些? 在控制台打印SQL语句的配置需要添加什么属性?,7. Hibernate基础,Hibernate的5个核心接口 Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象 Configuration config = new Configuration().configure(); SessionFactory接口:初始化Hibernate,充当数据存

12、储源的代理,创建session对象 SessionFactory factory = config.buildSessionFactory();,Hibernate基础,Session接口:负责保存、更新、删除、加载及查询对象 Session session = factory.openSession(); Transaction:管理事务 Transaction tr = session.beginTransaction(); Query与Criteria接口:执行数据库查询(该接口将在Hibernate查询中详细讲解),8. Hibernate应用,8.1 增加用户 Session对象的获

13、得与关闭,Before /目标方法前的方法 public void setUp() throws Exception /获得Hibernate配置管理接口Configuration Configuration config = new Configuration().configure(); /根据Configuration实例创建session的工厂类SessionFactory SessionFactory factory = config.buildSessionFactory();/通过session工厂获得session实例 session = factory.openSession

14、(); After /目标方法后的方法 public void tearDown() throws Exception session.close(); ,该方法获得session对象,该方法关闭session对象,增加用户,Test /增加用户 public void testSave() Transaction tr = session.beginTransaction(); Account user = new Account(G3,000000,1); session.save(user); mit(); ,在单元测试的setUp()方法中获得session对象,增、删、改要提交事务,

15、8.2 根据ID查询用户,Test /根据ID查询用户 public void testFindById() Account user = (Account)session.get(Account.class, new Integer(4); System.out.println(account_id:+user.getAccountId(); System.out.println(userName:+user.getUserName(); System.out.println(password:+user.getPassword(); System.out.println(isAct:+us

16、er.getIsAct(); ,查询不用提交事务,8.3 修改用户,Test /修改用户 public void testModify() Transaction tr = session.beginTransaction(); Account user = (Account)session.get(Account.class, new Integer(4); user.setPassword(123456); mit(); ,8.4 删除用户,Test /删除用户 public void testDel() Transaction tr = session.beginTransaction(); Account user = (Account)session.get(Account.class, new Integer(4); session.delete(user); mit(); ,9. 使用MyEclipse简化开发,My

温馨提示

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

评论

0/150

提交评论