当前位置:文档之家› 经典heibernate教程,从入门到精通

经典heibernate教程,从入门到精通


表现层 业务逻辑层 持久化层
对象数据(O) 对象数据(O) User对象 name:张三 sex:男 pw:123
关系型数据 关系型数据 (R) (R) TBL_User
小结
• 是一个主流的持久化框架
– 在JDBC基础上进行分装 – 只需要少量代码就可以完成持久化工作
• 是一个优秀的ORM(对象-关系映射)机制
2-2):添加配置文件 -- hibernate.cfg.xml
• <session-factory>
<property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="connection.datasource">java:/comp/env/pubs</propert y> <property name="session_factory_name">hibernate</property> <mapping resource="com/aptech/jb/entity/User.hbm.xml" />
使用Hibernate实现:
配置Hibernate关联自动加载区县对应的街道 配置Hibernate关联并实现:
1、增加一个公司:“CSTP” 2、增加CSTP下属的三个部门 3、删除“教学” 4、划“财务”到红旗渠 5、删除红旗渠
– 配置Hibernate多对多关联,实现某OA系统项 目和人员对照关系的管理
Hibernate.cfg.xml Hibernate.cfg.xml
FWXX.cfg.xml User.hbm.xml FWXX.cfg.xml User.hbm.xml 开始 Transaction Transaction
复杂的查询操作稍后介绍 复杂的查询操作稍后介绍
save delete update get mit() session.close() 结束 结束
第二章 Hibernate API
目标: •Hibernate API简介
Hinernate的体系结构(运行时)





SessionFactory:它保存了对当前数据库配置的所有映射关系,它是将某个 数据库的映射关系经过编译之后全部保存在内存中的。 它还是生成Session 的工厂,它在进行实例化的过程中将会用到ConnectionProvider。一个 SessionFactory对应一个数据库连接,当数据库连接改变时需要修改 SessionFactory Sesion: 是进行持久化操作的基础,所有的持久化操作都是在Session的基 础上进行的。它相当与JDBC中的Connection。它是Hibernate的持 久化管理 器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针对持久 化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对象的时候 会用 到。 Transation:功能上和数据库中的事务完全一样,通过它实现对数据库中事 务的控制。Transation对象是Session对象产生的,所以他的生命周期比 Session短。一个Session的生命周期中可以有多个Transaction对象。 ConnectonProvider:主要作用是生成与数据库建立了连接的JDBC对象, 同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应用程 序和底层的DataSource和DriverManager的隔离。 TransactionFactory:是生成Transaction对象的工厂,通过 TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无关
Configuration 接口:配置Hibernate,根启动Hibernate,创建 sessionFactory对象。 Query和Criteria 接口:执行数据库查询.
在java应用hibernate步骤
1. 2. 3. 4. 创建Hibernate 的配置文件。 创建持久化类 创建对象-关系映射文件 通过Hibernate API 访问数据库的代码
相同点:
• • • 两者都是JAVA的数据库操作中间件。 两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 两者都可以对数据库的更新操作进行显式的事务处理。
不同点:
• • • 使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate 使用的是HQL(Hibernate query language)语言 操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执 行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。 数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一 致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据 库中的值保持一致的。
• 什么是ORM?
ORM(对象-关系映射): ORM(对象-关系映射): 完成对象数据到关系型数据映射的 完成对象数据到关系型数据映射的 机制称为对象-关系映射,简称 机制称为对象-关系映射,简称 ORM。 ORM。 映射信息 映射信息
类: User 属性 name sex pw 表: TBL_User 字段 user_name user_sex user_pw
第一章 ORM 概述
目标: •理解ORM •熟悉Hibernate 的作用
软件分层的优点
1. 2. 3. 4. 5. 伸缩性 可维护性 可扩展性 可重用性 可管理性
Hibernate是一个优秀的持久化框架
什么是持久化?
瞬时状态: 瞬时状态: 保存在内存的程序数据,程序退出 保存在内存的程序数据,程序退出 后,数据就消失了,称为瞬时状态 后,数据就消失了,称为瞬时状态 持久状态: 持久状态: 保存在磁盘上的程序数据,程序退 保存在磁盘上的程序数据,程序退 出后依然存在,称为程序数据的持 出后依然存在,称为程序数据的持 久状态 久状态 持久化: 持久化: 将程序数据在瞬时状态和持久状态 将程序数据在瞬时状态和持久状态 之间转换的机制 之间转换的机制
内存
姓名:张三 密码:123 性别:男
用JDBC完成数据在持久和瞬时状 用JDBC完成数据在持久和瞬时状 态间的转换: 态间的转换: … … ***.execute ("… ") ***.execute ("… ") ... ...
磁盘
Action
Server
பைடு நூலகம்
Dao
用JDBC 持久数据
DB
Hiberante应用程序的结构
根据主键加载 根据主键加载 Session session = sf.openSession(); User user = (User)session.get(User.class, id); session.close(); System.out.println(user.getUname() + "," + user.getUpass()); tx = session.beginTransaction(); User user = this.testLoad(id); user.setUname("new Name"); session.update(user); mit(); tx = session.beginTransaction(); User user = this.testLoad(id); session.delete(user); mit(); 没有更新数 没有更新数 据,不进行事 据,不进行事 务控制 务控制 修改 修改
Hibernate 配置文件
持久化类
• JavaBean implements Serializable
创建对象-关系映射文件
• • • • • • • • • • • <hibernate-mapping> <class > <id> <column name="compid" /> <generator class="native" /> </id> <property name="" type=""> <column name="" length="" /> </property> </class> </hibernate-mapping>
(1)Application:应用 (2)Persistent Object:持久化对象 (3)hibernate.properties:Hibernate 属性文件/Hibernate配置文件 (4)XML Mapping:Hibernate映射文 件 (5)Database:数据库
JDBC与Hibernate的比较
– 通过映射文件保存映射信息 – 在业务层以面向对象的方式编程,不用考虑数据保存 形式
3个准备
1) 添加Hibernate库到项目
2-1):添加配置文件 -- hibernate.cfg.xml
<session-factory> <property name="connection.url"> jdbc:microsoft:sqlserver://localhost:1433;Database=pubs </property> <property name="ername">sa</property> <property name="connection.password">pwd</property> <property name="connection.driver_class"> com.microsoft.jdbc.sqlserver.SQLServerDriver </property> <property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="show_sql">true</property> <mapping resource="com/aptech/jb/entity/User.hbm.xml" /> </session-factory>
相关主题