学习了几天的 Hibernate 框架,今天简单总结一下吧。
一、环境搭建
1. 要想使用框架,jar 包是绝对少不了的,Hibernate 框架需要13个最基础的 jar 包,分别是:必要包9个 + 日志包3个 +驱动包 1 个,共计13个,如下:
required 包:
日志包:
驱动包:
2. 新建 JavaBean 类,并在 JavaBean 所在的包下创建配置文件,其默认的命名规则为:实体类名.hbm.xml。
2.1 在 .hbm.xml 文件中引入约束(Hibernate3.0的 dtd 约束),约束的寻找方法:项目名 --> Java Resources --> Libraries --> Web App Libraries --> hibernate-core-5.0.7.Final.jar --> org.hibernate --> hibernate-mapping-3.0.dtd --> 双击,复制以下代码到 .hbm.xml 文件中:
2.2 编写映射文件,首先需要编写一个 hibernate-mapping 标签,hibernate-mapping 标签下填写 class 标签,class 标签下填写 id 和 property 标签,如下:
<-- 主键的生成策略:本地 -->
......
3. 编写 Hibernate 的核心配置文件,首先要在 src 目录下创建 hibernate.cfg.xml 文件,文件名必须为 hibernate.cfg.xml,因为 Hibernate 框架会自动加载此文件。
3.1 同样是导入约束,不过这次导的是 hibernate-configuration-3.0.dtd 约束,查找方法与2.1类似,这里不再赘述。
3.2 编写配置文件,首先编写 hibernate-configuration 标签,其子标签需要 session-factory 和 mapping 标签,session-factory 中必须要配四大参数 + 数据库方言(这里以MySQL为例),mapping 标签则需要导入 .hbm.xml 的映射文件,配置完成后如下图:
这样环境算是搭建好了,我们可以开始编写代码了。
二、使用 Hibernate 开发的一般步骤
1. 加载配置文件
Configuration config = new Configuration().configure();
2. 创建 sessionFactory 对象
SessionFactory factory = config.buildSessionFactory();
3. 创建 session 对象
Session session = factory.openSession();
4. 开启事务
Transaction tr = session.beginTransaction();
5. 编写代码
......
6. 提交事务
tr.commit();
7. 释放资源
session.close();
factory.close();
三、一些零散的知识点
· 为了以后写代码的方便,可以编写一个 HibernateUtils 类,包含 getSession 方法,便于以后的开发。
· session 常用的方法:save(obj),delete(obj),get(obj),update(obj)..........
· 事务的特性:
1. 原子性,事务不可分割;
2. 一致性,事务执行的前后数据的完整性保持一致;
3. 隔离性,一个事务的执行的过程中,不应该受到其他事务的干扰;
4. 持久性,事务一旦提交,数据就永久保持到数据库中。
· 如不考虑隔离性,引发一些读的问题:
1. 脏读,一个事务读到了另一个事务未提交的数据;
2. 不可重复读,一个事务读到了另一个事务已经提交的 update 数据,导致多次查询结果不一致;
3. 虚读,一个事务读到了另一个事务已经提交的 insert 数据,导致多次查询结果不一致。
· 设置隔离级别解决以上问题:
1. 提交读(Read uncommitted isolation),以上的读的问题都有可能发生;
2. 已提交读(Read committed isolation),避免脏读,但是不可重复读,虚读都有可能发生;
3. 可重复读(Repeatable read isolation),避免脏读、不可重复读,但是虚读有可能发生;
4. 串行化(Serializable isolation),以上读的情况都可以不免。
· 开启绑定本地的 session,在核心配置文件中编写:
随后即可调用 getCurrentSession() 方法。
· 解决丢失更新:悲观锁(LockMode.UPGRADE)、乐观锁(version)。
· 操作多表:
1. 多方配置 set 集合并 new,一方创建对象;
2. 级联操作(cascade="save-update,delete")、放弃外键维护(invers="true")。
· Hibernate 的几种查询方式:
1. 唯一标识OID的查询方式;
2. 对象的导航的方式;
3. HQL的查询方式:session.createQuery("from XXX").list();
4. QBC的查询方式:session.createCriteria(XXX.class).list();
5. SQL语句查询方式。
· 解决重复数据方式:Set set = new HashSet(list);
· 离线查询
// 创建离线查询接口
DetachedCriteria criteria = DetachedCriteria.forClass(XXX.class);
// 添加查询条件
criteria.add(Restrictions.eq("字段", "值"));
// 查询数据
List list = criteria.getExecutableCriteria(session).list();
四、结语
简单总结了一下这几天所学的东西,其实在我看来想要玩好 Hibernate 框架,最重要的部分还是搭建框架的阶段,也就是编写配置文件以及映射文件阶段,所以本文在搭建环境中写得比较详细,同时也让自己再温故了一遍整个过程,也许停下快速的脚步来次简短的总结,会对今后的学习更有帮助!