Hibernate 简单总结

学习了几天的 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 标签,如下:

<hibernate-mapping>

 <class name="JavaBean 的 Qualified Name" table="表名">

  <id name="JavaBean 中的主键字段" column="映射到数据库的主键字段">

   <-- 主键的生成策略:本地 -->

   <generator class="native" />

  </id>

  <property name="JavaBean 中的其他字段" column="映射到数据库的其他字段" />

  ......

 </class>

</hibernate-mapping>

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

    <property name="hibernate.current_session_context_calss">thread</property>

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,485评论 9 66
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,995评论 0 27
  • 一. Java基础部分.................................................
    wy_sure阅读 3,833评论 0 11
  • 本文包括:1、Hibernate的持久化类2、Hibernate 持久化对象的三个状态(难点)3、Hibernat...
    廖少少阅读 1,472评论 0 13
  • 对人工智能,大数据,深度学习应用前景的看法也是千人千面,有人认为是风口,也有人认为是泡沫,或者兼而有之,即机...
    神秘嘉宾方阅读 600评论 0 3