Hibernate 简单总结

来源:互联网 发布:皮革护理 知乎 编辑:程序博客网 时间:2024/06/04 18:22

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