Hibernate核心思想与接口简介

 更新时间:2017年09月19日 16:03:59   作者:E_star  
这篇文章主要介绍了Hibernate核心思想与接口的相关内容,需要的朋友可以参考下。

hibernate是一个采用ORM机制持久层的开源框架,接下来我们聊聊它的核心思想和接口。

核心思想:ORM是将表与表之间的操作,映射成对象和对象之间的操作,这样简化了持久层的代码,减轻了程序员的负担

ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。

所有的Hibernate应用中都会访问Hibernate的5个核心接口

Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。

SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。

Session接口:负责保存、更新、删除、加载和查询对象。

Transaction接口:管理事务。

Query和Criteria接口:执行数据库查询。

1.Configuration接口

  Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。

2.SessionFactory接口

  一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点:

  它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。

  它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

  之所以称SessionFactory是重量级的,是因为它需要一个很大的缓存,用来存放预定义的SQL语句以能映射元数据等。用户还可以为SesionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的第二级缓存。,该缓存用来存放被工作单元读过的数据,将来其他工作单元可能会重用这些数据,因此这个缓存中的数据能够被所有工作单元共享。一个工作单元通常对应一个数据库事务。

3.Session接口

  Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。

Session有以下特点:

  不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。

  Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建和销毁Session对象,例如为每个客户请示分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

  Session有一个缓存,被称为Hibernate的第一级缓存,它存放被当前工作单元加载的对象。每个Session实例都有自己的缓存,这个Sesion实例的缓存只能被当前工作单元访问。

4.Transaction接口

  Transaction接口是Hibernate的数据库事务接口,它对底层的事务接口做了封装,底层事务接口包括:

  JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture)API

  Hibernate应用可通过一致的Transaction接口来声明事务边界,这有助于应用在不同的环境容器中移植。尽管应用也可以绕过Transaction接口,直接访问底层的事务接口,这种方法不值得推荐,因为它不利于应用在不同的环境移植。

5.Query和Criteria接口

  Query和Criteria接口是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例包装了一个HQL查询语句,HQL查询语句和SQL查询语句有些相似,但HQL查询语句是面向对象的,它引用类句及类的属性句,而不是表句及表的字段句。Criteria接口完全封装了基于字符串的查询语句,比Query接口更加面向对象,Criteria接口擅长执行动态查询。

  Session接口的find()方法也具有数据查询功能,但它只是执行一些简单的HQL查询语句的快捷方法,它的功能远没有Query接口强大。

本文关于Hibernate核心思想与接口的介绍就到这里,希望对大家有所帮助。感谢大家对本站的支持!

相关文章

  • 深入理解Spring bean加载顺序

    深入理解Spring bean加载顺序

    在默认配置下,SpringBean的加载顺序主要受到Bean定义顺序、依赖关系和生命周期回调方法的影响,本文就来了解一下Spring bean加载顺序,感兴趣的同学可以学习
    2024-10-10
  • Tomcat内存溢出分析及解决方法

    Tomcat内存溢出分析及解决方法

    堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的,本文将详细介绍Tomcat内存溢出,需要了解更多的朋友可以参考下
    2012-11-11
  • java  Swing基础教程之图形化实例代码

    java Swing基础教程之图形化实例代码

    这篇文章主要介绍了java Swing基础教程之图形化实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • spring 如何将配置信息注入静态变量的方法

    spring 如何将配置信息注入静态变量的方法

    本篇文章主要介绍了spring 如何将配置信息注入静态变量的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Java实现合并word文档的示例代码

    Java实现合并word文档的示例代码

    在做项目中,经常会遇到一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。本文就为大家准备了Java实现合并word文档的方法,需要的可以参考一下
    2022-08-08
  • struts2中使用注解配置Action方法详解

    struts2中使用注解配置Action方法详解

    这篇文章主要介绍了struts2中使用注解配置Action方法详解,涉及一个示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java方法参数传递如何实现

    Java方法参数传递如何实现

    这篇文章主要介绍了Java方法参数传递如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤

    Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤

    这篇文章主要介绍了Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 详解Java数组扩容缩容与拷贝的实现和原理

    详解Java数组扩容缩容与拷贝的实现和原理

    这篇文章主要带大家学习数组的扩容、缩容及拷贝,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringBoot发送邮件功能 验证码5分钟过期

    SpringBoot发送邮件功能 验证码5分钟过期

    这篇文章主要为大家详细介绍了SpringBoot发送邮件功能,验证码5分钟过期,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论