经典heibernate教程,从入门到精通
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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" />
– 通过映射文件保存映射信息 – 在业务层以面向对象的方式编程,不用考虑数据保存 形式
3个准备
1) 添加Hibernate库到项目
2-1):添加配置文件 -- hibernate.cfg.xml
<session-factory> <property name="connection.url"> jdbc:microsoft:sqlserver://localhost:1433;Database=pubs </property> <property name="connection.username">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>
Hibernate.cfg.xml Hibernate.cfg.xml
FWXX.cfg.xml User.hbm.xml FWXX.cfg.xml User.hbm.xml 开始 Transaction Transaction
复杂的查询操作稍后介绍 复杂的查询操作稍后介绍
save delete update get tx.commit() session.close() 结束 结束
第一章 ORM 概述
目标: •理解ORM •熟悉Hibernate 的作用
软件分层的优点
1. 2. 3. 4. 5. 伸缩性 可维护性 可扩展性 可重用性 可管理性
Hibernate是一个优秀的持久化框架
什么是持久化?
瞬时状态: 瞬时状态: 保存在内存的程序数据,程序退出 保存在内存的程序数据,程序退出 后,数据就消失了,称为瞬时状态 后,数据就消失了,称为瞬时状态 持久状态: 持久状态: 保存在磁盘上的程序数据,程序退 保存在磁盘上的程序数据,程序退 出后依然存在,称为程序数据的持 出后依然存在,称为程序数据的持 久状态 久状态 持久化: 持久化: 将程序数据在瞬时状态和持久状态 将程序数据在瞬时状态和持久状态 之间转换的机制 之间转换的机制
持久化操作 save/update/delete/find
创建和销毁都相当耗费 创建和销毁都相当耗费 资源,通常一个系统内 资源,通常一个系统内 一个数据库只创建一个 一个数据库只创Leabharlann Baidu一个 类似于JDBC中的 类似于JDBC中的 Connection Connection
Configuration Configuration 创建 SessionFactory SessionFactory 创建 Session Session 执行
Configuration 接口:配置Hibernate,根启动Hibernate,创建 sessionFactory对象。 Query和Criteria 接口:执行数据库查询.
在java应用hibernate步骤
1. 2. 3. 4. 创建Hibernate 的配置文件。 创建持久化类 创建对象-关系映射文件 通过Hibernate API 访问数据库的代码
• </session-factory>
准备3:添加实体类和映射文件(UserInfo.hbm.xml)
使用Hibernate的7个步骤:
1、 Configuration 7、 关闭Session 2、 创建 SessionFactory
6、 提交事务 5、 4、 开始一个事务
3、 打开 Session
根据主键加载 根据主键加载 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); tx.commit(); tx = session.beginTransaction(); User user = this.testLoad(id); session.delete(user); tx.commit(); 没有更新数 没有更新数 据,不进行事 据,不进行事 务控制 务控制 修改 修改
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>
表现层 业务逻辑层 持久化层
对象数据(O) 对象数据(O) User对象 name:张三 sex:男 pw:123
关系型数据 关系型数据 (R) (R) TBL_User
小结
• 是一个主流的持久化框架
– 在JDBC基础上进行分装 – 只需要少量代码就可以完成持久化工作
• 是一个优秀的ORM(对象-关系映射)机制
• 什么是ORM?
ORM(对象-关系映射): ORM(对象-关系映射): 完成对象数据到关系型数据映射的 完成对象数据到关系型数据映射的 机制称为对象-关系映射,简称 机制称为对象-关系映射,简称 ORM。 ORM。 映射信息 映射信息
类: User 属性 name sex pw 表: TBL_User 字段 user_name user_sex user_pw
第二章 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实现了事务的封装,使其具体的实现方法与应用程序无关
ID
<id name="propertyName" type="typename" column="column_name" unsavedvalue="null|any|none|undefined|id_value" access="field|property|ClassName" node="element-name|@attribute-name|element/@attribute|."> <generator class="generatorClass"/> </id> • • • • name (可选): 标识属性的名字。 type (可选): 标识Hibernate类型的名字。 column (可选 - 默认为属性名): 主键字段的名字。 unsaved-value (可选 - 默认为一个切合实际(sensible)的值): 一个特定的标识属性值 ,用来标志该实例是刚刚创建的,尚未保存。 这可以把这种实例和从以前的session中 装载过(可能又做过修改--译者注) 但未再次持久化的实例区分开来。 access (可选 - 默认为property): Hibernate用来访问属性值的策略。
内存
姓名:张三 密码:123 性别:男
用JDBC完成数据在持久和瞬时状 用JDBC完成数据在持久和瞬时状 态间的转换: 态间的转换: … … ***.execute ("… ") ***.execute ("… ") ... ...
磁盘
Action
Server
Dao
用JDBC 持久数据
DB
Hiberante应用程序的结构
使用Hibernate实现:
配置Hibernate关联自动加载区县对应的街道 配置Hibernate关联并实现:
1、增加一个公司:“CSTP” 2、增加CSTP下属的三个部门 3、删除“教学” 4、划“财务”到红旗渠 5、删除红旗渠
– 配置Hibernate多对多关联,实现某OA系统项 目和人员对照关系的管理
相同点:
• • • 两者都是JAVA的数据库操作中间件。 两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 两者都可以对数据库的更新操作进行显式的事务处理。
不同点:
• • • 使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate 使用的是HQL(Hibernate query language)语言 操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执 行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。 数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一 致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据 库中的值保持一致的。
(1)Application:应用 (2)Persistent Object:持久化对象 (3)hibernate.properties:Hibernate 属性文件/Hibernate配置文件 (4)XML Mapping:Hibernate映射文 件 (5)Database:数据库
JDBC与Hibernate的比较