Hibernate综述

面向对象的方式进行持久层操作。

底层数据连接的获得、数据访问的实现、事务控制都无需用户关心。

这是一种“全面解决”的体系结构方案,将应用层从底层的JDBC/JTA API中抽象出来。

通过配置文件来管理底层的JDBC连接,让Hibernate解决持久化访问的实现。、

(1)SessionFactory:这是Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,它也是线程安全的。它是生成Session的工厂,本身要应用到ConnectionProvider,该对象可以在进程和集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存

(2)Session:它是应用程序和持久存储层之间交互操作的一个单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session的管理下才能够进行持久化操作。此对象的生存周期很短,其隐藏了JDBC连接,也是Transaction 的工厂。Session对象有一个一级缓存,现实执行Flush之前,所有的持久化操作的数据都在缓存中Session对象处。

(3)持久化对象:系统创建的POJO实例一旦与特定Session关联,并对应数据表的指定记录,那该对象就处于持久化状态,这一系列的对象都被称为持久化对象。程序中对持久化对象的修改,都将自动转换为持久层的修改。持久化对象完全可以是普通的Java Beans/POJO,唯一的特殊性是它们正Session关联着

(4)瞬态对象和脱管对象:系统进行new关键字进行创建的Java 实例,没有Session 相关联,此时处于瞬态【临时对象】。瞬态实例可能是在被应用程序实例化后,尚未进行持久化的对象。如果一个曾今持久化过的实例,但因为Session的关闭而转换为脱管状态【游离对象】

(5)事务(Transaction):代表一次原子操作,它具有数据库事务的概念。但它通过抽象,将应用程序从底层的具体的JDBC、JTA和CORBA事务中隔离开。在某些情况下,一个Session 之内可能包含多个Transaction对象。虽然事务操作是可选的,但是所有的持久化操作都应该在事务管理下进行,即使是只读操作。

(6)连接提供者(ConnectionProvider):它是生成JDBC的连接的工厂,同时具备连接池的作用。他通过抽象将底层的DataSource和DriverManager隔离开。这个对象无需应用程序直接访问,仅在应用程序需要扩展时使用。

(7)事务工厂(TransactionFactory):他是生成Transaction对象实例的工厂。该对象也无需应用程序的直接访问。

==========================================================================

Hibernate的正常工作是建立在Configuration,SessionFactory,Session等类的基础上。

——Configuration类:管理Hibernate的配置工作。

加载XML文档。Hibernate如何添加各种资源。

创建SessionFactory

——SessionFactoryConnection工厂,由配置类获得。代表单个数据库。

SessionFactroy sessionFactory = new Configuration().configure().buildSessionFactory();

创建Session,获取Session和打开Session。

——Session:加载持久类。保存和更新数据。包括事务处理的功能。

Hibernate中的Session就是Connection。

Session session = SessionFactory.openSession();

==========================================================================

时间: 2024-07-31 16:45:24

Hibernate综述的相关文章

Hibernate框架简介(二)基本使用增、删、改、查

一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬时状态:在程序运行的时候,有些程序数据是保存在内存中,当程序退出后,这些数据就不复存在了,所以称这些数据的状态为瞬时状态 持久状态:在使用一此软件的时候,有些数据,在程序退出后,还以文件等形式保存在硬盘或者数据库中,称这些数据的状态是持久状态 持久化:持久化就是将程序中的数据在瞬时状态和持久状态之间

java三大框架之一hibernate使用入门

综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包, 关于如何下载网上也有详细的教程.下载后解压出来,其中required里面的jar包全部是必须的,可以都放在一个library中,然后再加上mysql(或其他数据库)的驱动包,就是我们需要的所有类库了. 2. 类库全部添加进来之后就是框架的配置问题了.这里主要配置两部分:hibernate.cfg

hibernate的缓存问题

又到了写总结的时候了,今天来扒拉扒拉hibernate的缓存问题,顺便做了几个小测试,算是学习加上复习吧,下面开始. 1.综述 首先为什么要有缓存这项技术,详细原因呢我也不知道,唯一知道的一点就是web应用在和数据库打交道时,查询数据库的次数越少越好,可能说的也不太准确吧,什么意思呢,就是尽量减少查询数据库的次数,但是有时候一样的数据我们又需要查询很多次,怎么办呢?这时候就是缓存大展身手的时候了,可以把查询的数据先缓存下来,需要的时候从缓存里面来拿,如果缓存里面没有需要的数据再从数据库去查,这样

spring框架1:综述

本系列笔记均是对b站教程https://www.bilibili.com/video/av47952931 的学习笔记,非本人原创 综述 image-20200217205526127 什么是spring: Spring的核心是一个轻量级(Lightweight)的容器(Container). Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架. Spring提供AOP(Aspect-oriented programming)概念

Hibernate - HHH000352: Unable to release batch statement

这是hibernate的一个bug,具体看https://hibernate.atlassian.net/browse/HHH-11732?attachmentViewMode=list When using stateless session with jdbc batch size we get an HHH000352: Unable to release batch statement.. error in session.close() after rollback: Code:Con

Hibernate简述及入门实例

一.Hibernate简述 总的概括,Hibernate是一个ORM的轻量级持久层框架,解决了对象和关系数据库中表的不匹配问题(阻抗不匹配)以及拥有开发代码不用去继承hibernate类或接口的优势(无侵入性).hibernate框架实现使得开发人员可以避免反复地编写javajdbc部分代码,应用面向对象的思维操作关系型数据库. 二.使用myeclipse创建hibernate实例两种方法(以hibernate3.5.2及mysql为例) a)手动编写hibernate.cfg.xml及*.hb

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

Hibernate的七种映射关系之七种关联映射(二)

继续上篇博客 七.Hibernate双向一对多关联映射:让多的一端来维护关系. 主要是解决一对多单向关联的缺陷,而不是需求驱动的. 1.在Student.java实体类里添加Classes引用.private Classes classes; 2.Student.hbm.xml里添加many-to-one标签:<many-to-one name="classes" column="classesid"/>.Classes.hbm.xml在例子(六)里的那

Hibernate的七种映射关系之七种关联映射(一)

关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 一.Hibernate多对一关联映射:就是在"多"的一端加外键,指向"一"的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1."多"端实体加入引用"一"端实体的变量及getter,setter方法. 比如说多个学生对应一个班级,在学生实体类加入:private Grade grade; 2."多"端配置文