Hibernate 简单总结

学习了几天的 Hibernate 框架,今天简单总结一下吧。

一、环境搭建

1. 要想使用框架,jar 包是绝对少不了的,Hibernate 框架需要13个最基础的 jar 包,分别是:必要包9个 + 日志包3个 +驱动包 1 个,共计13个,如下:

required 包:

Hibernate 简单总结_第1张图片

日志包:

驱动包:

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 简单总结_第2张图片

  这样环境算是搭建好了,我们可以开始编写代码了。

二、使用 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,在核心配置文件中编写:

    thread

    随后即可调用 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 框架,最重要的部分还是搭建框架的阶段,也就是编写配置文件以及映射文件阶段,所以本文在搭建环境中写得比较详细,同时也让自己再温故了一遍整个过程,也许停下快速的脚步来次简短的总结,会对今后的学习更有帮助!

你可能感兴趣的:(Hibernate 简单总结)