Hibernate应用基础知识.ppt
企业级JAVA II,软件工程系:聂常红,内容回顾,输入校验概念输入校验方式Struts2校验框架校验语法常用Struts2校验器Struts2校验器配置方式,第8讲 Hibernate应用基础知识,8.1ORM框架8.2 Hibernate8.2.1 Hibernate的运行环境8.2.2 持久化类8.2.3 映射文件8.2.4 Hibernate核心类与接口8.3 开发一个简单的Hibernate项目8.4 Hibernate对象的三种状态8.5 持久层设计模式8.6 基于持久层框架的DAO模式应用示例,8.1 ORM,问题引入:面向对象语言:对象模型,主要概念是类、对象、继承、多态、关联等关系型数据库:关系模型,主要概念是表、记录、主键、外键等面向对象语言和数据库之间存在模型不匹配(阻抗不匹配)问题问题解决办法:使用ORM框架,ORM:ORM(Object/Relation Mapping,对象、关系数据库映射),用于实现Java应用中的对象与关系数据库中的数据的映射,从而可以通过持久化对象(PO)以面向对象的方式来操作数据库。ORM关系图:,8.2 hibernate,主流的ORM框架有hibernate、TopLink等,其中hibernate应用最广泛Hibernate是轻量级的Java EE应用的持久层解决方案。它对JDBC进行了轻量级的封装,不仅能管理Java类到数据库表的映射,还能提供数据查询和获取数据的方法。使用Hibernate可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,Hibernate简要体系架构:,PO是应用程序和ORM框架之间的一个媒介,Hibernate运行环境,需要以下jar文件:配置文件或hibernate.properties属性文件用于配置数据库连接设置、Hibernate属性设置及映射文件设置。两者取一,常用xml文件,hibernate.cfg.xml示例:,实际使用一般不用Hibernate的连接池,持久化类,ORM的作用是把对PO的CRUD等操作转换成对数据库的相关操作。持久化类编写规范:必须具有无参构造方法具有一个主键属性非final类,否则无法使用懒加载以及代理使用JavaBean的编写规范来编写属性的setter和getter方法,持久化类创建示例:,映射文件,用于设置持久化类与数据库表的映射关系,是hibernate的核心所在。一般以持久化类名+hbm.xml来命名,如Person.hbm.xml;并保存在与持久化类同目录下最主要的元素有::设置类-表之间的映射:设置主键映射:设置普通属性-表字段之间的映射、:设置关联映射,映射文件示例:,常用主键生成方式:assigned:由应用程序生成identity:使用数据库提供的自增长主键机制,如Mysqlsequence:使用数据库提供的sequence机制生成主键,如oraclenative:由hibernate根据数据库驱动定义,自动选择主键生成机制,8.2.4 Hibernate核心API,Configuration类:负责读取及解析Hibernate的配置信息创建SessionFactory实例,SessionFactory接口:是数据库编译后的内存镜向,其中缓存了解析后的配置信息在应用初始化时创建,对于使用一个数据库的应用程序只有一个会话工厂用于创建Session实例,ServiceRegistry类型,Session接口:Session封装了与数据库之间的一系列操作所有持久化操作都需要使用该接口所有持久化操作完成后,需要关闭会话,Transaction接口:使用Hibernate进行持久化操作必须显式开启事务使用Session实例开启事务持久化操作在事务提交后生效,使用Hibernate进行持久化操作步骤,搭建Hibernate运行环境配置文件创建持久化类,并设置映射文件获取Configuration实例获取SessionFactory实例获取Session实例开启事务用面向对象的方式操作数据库提交或回滚事务,关闭Session,8.3 开发一个简单的Hibernate项目,建立数据库新建Java项目将Hibernate所需JAR文件及数据库驱动类库添加到构建路径编写Hibernate配置文hibernate.cfg.xml,保存在src目录下编写持久化类编写测试类,编写hibernate.cfg.xml:,编写持久化类Person.java:,编写映射文件Person.hbm.xml:,编写测试类:,8.4 Hibernate中Java对象的状态,在hibernate中,Java对象在整个生命周期中存在以下三种状态:瞬时状态:在内存中刚刚创建的对象,数据库中没有数据与之对应,与session也没有关联持久化状态:数据库中有数据与之对应,且与session有关联;持久对象状态发生改变时,事务提交时会自动更新数据库游离(脱管)状态:数据库中有数据与之对应,但当前没有session与之关联;对象状态发生改变,hibernate不能检测到,必须调用update()才能更新到数据库,游离状态,1.update()2.saveOrUpdate()3.lock(),1.save()2.saveOrUpdate(),Java对象状态转换图,瞬时状态,持久化状态,1.evict()2.close()3.clear(),1.get()2.load()3.find(),delete(),8.5 持久层设计模式,数据的持久化就是将内存中的数据固化到服务器的存储介质中。在企业级应用中,通常将数据的持久化放到一个相对独立的逻辑层面上,这个逻辑层称为持久层。数据持久化设计的模式主要有:混杂模式:在业务代码中夹杂着数据持久化代码。适用于小型应用,可读性差,后期维护和扩展困难,业务逻辑+SQL,DB,基于Data class的持久层实现模式(DAO模式):把对数据库的处理代码从应用中抽取出来,放到单独的接口及其实现类中。基于持久层框架的实现模式:是第二种模式的延伸,将繁杂的SQL代码处理交给第三方组件完成,业务逻辑,DB,业务逻辑,DB,8.6 基于持久层框架的DAO模式应用示例,建立数据库新建Java项目将Hibernate所需JAR文件及数据库驱动类库添加到构建路径编写持久化类编写一个工具类,用于获取Session实例编写DAO接口使用Hibernate API实现DAO接口编写测试类,编写hibernate.cfg.xml:,编写持久化类Person.java:,编写映射文件Person.hbm.xml:,编写工具类:,编写DAO接口:,使用Hibernate API实现DAO接口,编写测试类:,思考题,如何搭建Hibernate运行环境?持久化类的编写规范有哪些?Hibernate的配置文件默认名称是什么?保存在哪里?映射文件的作用是什么?如何命名?保存在哪里Hibernate核心类与接口主要有哪些?常用持久化方法有哪些?Hibernate对象的生命周期中有哪几种状态?Hibernate持久化设计模式是什么模式,如何应用?,