Hibernate
概述
Hibernate ORM使开发人员可以更轻松地编写其数据超出应用程序进程寿命的应用程序。作为对象/关系映射(ORM)框架,Hibernate关注数据持久性,因为它适用于关系数据库(通过JDBC)。
Hibernate使您可以遵循自然的面向对象习惯用法(包括继承,多态性,关联,组合和Java集合框架)来开发持久类。 Hibernate不需要接口或基类来用于持久类,并使任何类或数据结构都可以持久化。
Hibernate支持延迟初始化,多种获取策略以及具有自动版本控制和时间戳记的乐观锁定。 Hibernate不需要特殊的数据库表或字段,并在系统初始化时而不是在运行时生成大量SQL。 从开发人员的生产力和运行时性能方面来说,Hibernate始终提供优于纯JDBC代码的卓越性能。
作为ORM解决方案,Hibernate有效地“位于” Java应用程序数据访问层和关系数据库之间。 Java应用程序利用Hibernate API来加载,存储,查询等等其域数据。作为JPA提供程序,Hibernate实现Java Persistence API规范,并且可以在下图中直观地显示JPA接口与Hibernate特定实现之间的关联:
- SessionFactory - 作为一个不可变的线程安全,主要用于创建Session。一个SessionFactory的创建非常昂贵,因此,对于任何给定的数据库,该应用程序应仅具有一个关联的SessionFactory。 SessionFactory维护Hibernate在所有Session中使用的服务,例如二级缓存,连接池,事务系统集成等。
- Session - 单线程,短期对象在概念上为“工作单元”。在JPA术语中,Session由EntityManager表示。在后台,Hibernate Session包装了JDBC java.sql.Connection并充当org.hibernate.Transaction实例的工厂。它维护应用程序域模型的一般“可重复读取”持久性上下文(一级缓存)。
- Transaction - 应用程序用来划分单个物理事务边界的单线程,短期对象。 EntityTransaction与JPA等价,并且两者均充当抽象API,以将应用程序与使用中的基础事务系统隔离。
ORM指Object(对象) Relationship(关系型数据库) Mapping(映射),就是在java实体类,实体类属性与关系型数据库表,表字段之间建立起来的一种对应关系。Hibernate中,映射关系建立好,意味着实体的CRUD操作可以得到简化。
快速搭建
- 项目空间结构截图
- 导入Maven依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.14.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- 创建User.hbm.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.baizhi