1 技术介绍

1.1、Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架。hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

什么是ORM?
所谓的ORM,对象关系映射(Object Relation Mapping),指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。可以把ORM理解为关系型数据和对象的一个纽带,开发人员只需要关注纽带一端映射的对象即可。

1.2、作用

  1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
  2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
  3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
  4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

1.3.1、优势

  1. 对象化。
  2. 更好的移植性。
  3. 开发效率高。
  4. 缓存机制的使用。

1.3.2、不足

  1. 灵活性和效率不如原生JDBC程序。
  2. 配置文件复杂。
  3. 不适于复杂关系的数据表维护。
  4. 批量操作上的弱势。

1.4、与MyBatis的对比

相同点

  1. Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。
  2. Hibernate和MyBatis都支持JDBC和JTA事务处理。

不同点

  1. hibernate是全自动,mybatis是半自动
  2. hibernate数据库移植性远大于mybatis
  3. hibernate拥有完整的日志系统4、mybatis相比hibernate要关心很多细节
  4. sql直接优化上,mybatis要方便很多
  5. 缓存机制上,hibernate要更好一些

2 使用示例

2.1、基本配置

这里讲的是XML配置,包括:
(1)核心配置文件:hibernate.cfg.xml (放到src目录下)
(2)映射配置文件:***.hbm.xml(与实体类放同一目录),主要是用于描述类与数据库中的表的映射关系
核心配置文件:hibernate.cfg.xml

  1. 数据库连接配置

  2. 方言配置

  3. 映射文件配置

映射配置文件:***.hbm.xml

  1. 建立类与表的映射

  2. 建立属性与主键的映射

  3. 建立普通属性和表中的字段相对应

2.2、工作原理

  1. Configuration().configure()读取并解析hibernate.cfg.xml配置文件
  2. 由hibernate.cfg.xml中的<mapping resource=“**.hbm.xml”/>读取并解析映射信息
  3. config.buildSessionFactory();创建SessionFactory
  4. sessionFactory.openSession();打开Sesssion
  5. session.beginTransaction();创建事务Transation
  6. persistent operate持久化操作//一般指Save方法
  7. session.getTransaction().commit();提交事务
  8. 关闭Session
  9. 关闭SesstionFactory

2.3、常用API

org.hibernate.cfg.Configuration
加载主配置文件以及映射文件,启动 hibernate。
主配置文件中主要有:数据库连接四要素,方言,数据源…
默认获取 hibernate.cfg.xml 配置文件
SessionFactory接口
用来获取和管理我们的seesion,它在hibernate中其实是相当于一个缓冲区的作用
这个接口是hibernate的一个重量级对象,系统开销大(重要)。
它是单例的,但是它是线程安全的
Session接口
应用程序和数据库的一次交互(会话),每次执行一个数据库的事务,都要创建新的session实例,用完以后需要关闭,不关闭,session 会不够用,内存会崩溃。
一个轻量级的接口,它是多例的,但是它是线程不安全的。
如果要保证一个线程一个session,所以需要在hibernate.cfg.xml里面配置

2.4、例子一:Java中使用Hibernate(结尾附代码)

  1. 环境:Windows 10 + Eclipse Java 2019-09 + Mysql 8

  2. 创建数据库和表,这里使用的数据库是Mysql,可视化工具是Navicat

  3. 创建项目

  4. 导入jar包

  5. 创建实体类 Student.java

  6. 编写Hibernate的配置文件 Student.hbm.xml,在实体类同一个包下创建

其中,主键字段必须加上

否则会报错

Repeated column in mapping for Student:(should be mapped with insert="false" update="false")
  1. 编写Hibernate的配置文件 hibernate.cfg.xml,在src下创建

  2. 创建单元测试类 StudentTest1.java

  3. 启动测试类

  1. 查看数据库,成功添加记录
  2. 整个工程的结构

2.5、例子二:在Spring中整合Hibernate(结尾附代码)

  1. 环境:Windows 10 + Eclipse Java 2019-09 + Mysql 8

  2. 创建maven项目,添加依赖

  3. 添加配置文件applicationContext.xml文件,配置数据库的驱动连接和sessionFactory的初始化对象

  4. 工程代码目录结构

  5. 使用注解方式,实现实体类对应的数据库表

  6. 实体类 Student.java 主键属性需要加上@Id,否则会报错

  7. StudentDao.java 实现一个创建记录的方法

  8. StudentService.java

  9. 测试类 App.java

  10. 启动测试类

  11. 数据库实现记录创建

代码链接

链接
提取码:qjqn

版权声明:本文为ahmao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ahmao/p/13746178.html