第四章 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()--把一个游离状态对象的属性复制到一个持久化对象中,
执行更新或插入操作并返回持久化的对象,如果传入瞬时对象则保存并返回其副本