首页 > 代码库 > 第四章 Hibernate入门
第四章 Hibernate入门
第四章 Hibernate入门
4.1 框架技术
4.1.1 框架的概念
框架是一个提供了可重用的公共结构的半成品。
4.1.2 主流框架
4.1.2.1 Struts框架
4.1.2.2 Struts2框架
4.1.2.3 Hibernate框架
一个优秀的持久化框架,负责简化对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。
4.1.2.4 Spring框架
4.2 Hibernate介绍及环境搭建
4.2.1 数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。
4.2.2 Hibernate框架及ORM
4.2.2.1 Hibernate框架(数据持久化工具,对象关系映射框架)
4.2.2.2 O<->R<->M(对象/关系映射,数据持久化技术)
4.2.3 Hibernate框架的优缺点级使用场合
4.2.3.1 优点
1)Hibernate功能强大
2)Hibernate支持许多对象多面向对象的特性
3)可移植性好
4)Hibernate开源免费
适用于大中型项目
4.2.3.2 缺点
1)不适合以数据为中心大量使用储存过程的应用
2)大规模的批量插入,修改和删除不适用Hibernate
不适用小型项目,也不适用关系模型设计不合理,不规范的系统
4.2.4 Hibernate的环境搭建
1、下载需要的jar包
2、部署jar包
3、创建Hibernate配置文件hiernate.cfg.xml
常用参数:
connection.url:数据库URL
connection.username:数据库用户名
connection.password:数据库密码
connection.driver_class:数据库驱动
dialect:配置Hibernate使用的数据库类型
current_session_context_class:指定currentSession()所得的session由谁来跟踪管理
show_sql:参数为true,程序运行时在控制台输出sql语句
format_sql:参数为true,程序运行时在控制台输出格式化后sql语句
4、创建持久化类和映射文件
4.3 使用Hibernate完成持久化操作
4.3.1 使用Hibernate持久化操作7大步骤
1、读取并解析配置文件
Configuration conf = new Configuration().configure();
根据默认位置的配置文件的配置信息,构建Configuration对象
2、读取并解析映射信息,创建SessionFactory对象
SessionFactory sf = conf.buildSessionFactory();
SessionFactory负责创建Session对象
3、打开Session
Session session = sf.openSession();
Session是Hibernate持久化操作的基础
4、开始一个事务(增删改操作必须,查询可选)
Transaction tx = session.beginTransaction();
5、数据库操作
如:session.save();//保存操作
6、结束事务
tx.commit();//提交事务
7、关闭session
session.close();
4.3.2 使用Hibernate实现按主键查询
4.3.2.1 Object get(Class clazz,Serializable id);
例://加载数据操作
Dept dept=(Dept)session.get(Dept.class,new Byte("11"));
4.3.2.2 Object load(Class theClass,Serializable id);
例://加载数据操作
Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
区别:如果加载数据不存在时,get()方法会返回一个NULL,但是load()方法则会抛出异常
4.3.3 使用Hibernate实现数据库的增删改操作
4.3.3.1 使用Hibernate实现增加
例://持久化操作
session.save(dept);
//提交事务
tx.commit();
4.3.3.2 使用Hibernate实现修改、删除
例1://获取要修改的对象
Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
//修改信息
dept.setDeptName("行政部");
//提交事务
tx.commit();
例2://获取要删除的对象
Dept dept=(Dept)session.load(Dept.class,new Byte("11"));
//删除信息
session.delete(dept);
//提交事务
tx.commit();
增删改操作必须在事务环境中完成
4.4 Hibernate中Java对象的三种状态
4.4.1
瞬时状态:创建对象后,对象没有立刻持久化并没有和数据库的数据有任何关联
持久状态:对象和Session管理,被session管理时
游离状态:处于持久状态的对象,脱离与其关联的Session的管理后
4.4.2 状态的转换
4.4.2.1:瞬时状态转换为持久状态
瞬时状态使用Session对象的save()和saveOrUpdate()保存对象后,瞬时状态转换为持久状态
4.4.2.2:持久状态转换为瞬时状态
持久状态使用Session对象的delete()保存对象后,持久状态转换为瞬时状态
4.4.2.3:持久状态转换为游离状态
持久状态使用Session对象的evict(),clear(),close()保存对象后,持久状态转换为游离状态
4.4.2.4:游离状态转换为持久状态
游离状态使用Session对象的update(),saveOrUpdate()保存对象后,游离状态转换为持久状态
4.4.2.5:游离状态转换为瞬时状态
游离状态使用Session对象的delete()保存对象后,游离状态转换为瞬时状态
4.5 脏检查及刷新缓存机制
4.5.1 脏检查(Hibernate对session中持久状态的对象进行检测,判断对象的数据是否发生了改变,这种判断叫作脏检查)
脏对象(状态前后发生变化的对象称为脏对象)
4.5.2 刷新缓存机制
1)当应用程序调用Transaction的commit()时,会调用session的刷新缓存方法flush();
2)当程序显式调用session个的flush()方法,刷新缓存。
4.6 更新数据方法
1) update()--修改信息,没有OID时报错
2) saveOrUpdate()--同时包含保存和更新方法的功能,瞬时状态使用save();游离状态调用update();
3) merge()--把一个游离状态对象的属性复制到一个持久化对象中,
执行更新或插入操作并返回持久化的对象,如果传入瞬时对象则保存并返回其副本
第四章 Hibernate入门