菜鸟学SSH(十)——Hibernate核心接口
在使用Hibernate的时候,我们通常都会用的Configuration、SessionFactory、Session、Transaction、Query和Criteria等接口。通过这些接口可以,不仅可以存储与取出持久化对象,还可以对事务进行管理。下面对着几个接口一一介绍:
几个接口之间的层次关系如下图:
Configuration:
Configuration是Hibernate的入口,负责将配置文件信息加载到内存,并创建一个SessionFactory对象,把读入的配置信息加载到SessionFactory对象的内存里。
特点:
Configuration对象的作用是除了有读取配置文件的功能,还能创建SessionFactory对象。Configuration对象只存在于系统的初始化阶段,然后所有的持久化操作都能通过这个SessionFactory实例来进行。
Configuration对象只有在Hibernate 进行初始化的时候才需要创建,当使用Configuration对象的实例创建了SessionFactory对象的实例后,其配置信息已经绑定在他返回的SessionFactory对象实例中。因此,一般情况下,得到SessionFactory对象后,Configuration对象的使命就结束了。
用法:
属性文件(hibernate.properties):Configuration cfg = new Configuration();
Xml文件(hibernate.cfg.xml):Configuration cfg = new Configuration().configure();
SessionFactory:
SessionFactory负责创建Session实例,每个SessionFactory实例对应一个数据库。SessionFactory是重量级的,占用缓存较大,所以每个数据库只需创建一个SessionFactory实例,当需要操作多个数据库时,再为每一个数据库指定一个SessionFactory实例。
特点:
1,线程安全,同一个实例可以被应用的多个线程共享
2,重量级,不能随意创建和销毁他的实例,一个数据库,只需要创建一个SessionFactory的实例。
3,以后对Configuration对象势力作出的修改都不会影响已经创建好的SessionFactory实例,如果需要使用基于改动后的Configuration实例的SessionFactory,需要从Configuration对象中重新创建新的SessionFactory实例。
用法:
Configuration config = new Configuration();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = config.buildSessionFactory(sr);
Session:
Session是Hibernate持久化操作的基础,负责管理所有与持久化有关的操作,Session与SessionFactory不同,它是轻量级的,也是非线程安全的。创建和销毁不会消耗太多资源,可以为每一个请求分配一个Session。
特点:
1,不是线程安全的,应该避免多个线程共享同一个Session实例。
2,Session实例是轻量级的。
3,Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。
用法:
Session session = sessionFactory.openSession();
常用方法:
session.save();
session.update();
session.saveOrUpdate();
session.delete();
Transaction:
Transaction负责Hibernate的数据库事务,其实Hibernate本身并不具备事务管理的能力,只是对底层事务接口进行了封装,这样有利于在不同环境或容器中移植,也可以直接访问底层的事务接口。
用法:
Transaction tx = session.beginTransaction();
Query和Criteria:
Query和Criteria负责Hibernate的查询操作。
Query实例封装了一个HQL(Hibernate Query Language)查询语句,HQL与SQL有些类似,只是HQL是面向对象的,它操作的是持久化类的类名和属性名,而SQL操作的是表名和字段名。
Criteria实例完全封装了字符串形式的查询语句,它比Query实例更加面向对象,更适合执行动态查询。
本文只是对这几个接口的一个简单介绍,它们还有很多需要我们去学习跟了解的地方,这几个接口有一个共同的目的,就是让我们用更加面向对象的方式去编程。
菜鸟学SSH(十)——Hibernate核心接口的更多相关文章
- hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。
hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate. ...
- Hibernate详解(5)——Hibernate核心接口和工作原理
Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...
- 深入解析Hibernate核心接口
Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate核心接口,包括介绍SessionFactory接口.Query和Criteria接口等方面. Session 接口对于Hibe ...
- Hibernate核心接口和工作原理
Hibernate核心接口和工作原理 Hibernate有五大核心接口,分别是:Session .Transaction .Query .SessionFactory .Configuration . ...
- hibernate学习系列-----(2)hibernate核心接口和工作机制
在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...
- 菜鸟学SSH(三)——Struts2国际化自动检测浏览器语言版
前几天发了一篇Struts国际化的博客——<菜鸟学习SSH(二)——Struts2国际化手动切换版>,有网友提了一个意见,见下图: 于是就有了下面修改的版本: web.xml <?x ...
- 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表
项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...
- 菜鸟学SSH(十五)——简单模拟Hibernate实现原理
之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类.好了,废话不多说 ...
- 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
前几天向大家介绍了一种用工具类生成数据表的方法,只是之前的方法须要使用一个跟项目关系不大的工具类.不免让人认为有些多余,所以呢.今天再向大家介绍一种方法.即Hibernate与Spring配合生成表结 ...
随机推荐
- Memcacher win7 安装测试
1.下载memcache 的windows 稳定版,解压放某个盘下面,比如在H:/wamp/www/php api/memcache: 2.在终端(即cmd 命令界面)下,输入安装命令 :H:/wam ...
- svn 命令行下常用的几个命令
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domai ...
- navicat-mysql-linux工具
navicat强大的数据库图形化家族,基本都是支持跨平台的!navicat-mysql-linux在Linux是通过Wine工具执行exe文件,默认15天的免费试用时间! 1. 下载 云上下载:htt ...
- Javascript + Dom知识点总结
Javascript + Dom知识点总结 1.用Javascript声明数组和字典的方式 // 数组声明 var arr = new Array(); arr["0"] = &q ...
- 点击threadItem查看MessageList时传递数据
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ...
- 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记
来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...
- [转载]显示SVN控制台
原文地址:显示SVN控制台作者:瘦骨临清风 青春就应该这样绽放 游戏测试:三国时期谁是你最好的兄弟!! 你不得不信的星座秘密
- 详解SpringMVC中Controller的方法中参数的工作原理——基于maven
转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...
- HDUOJ----Coin Change
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Tensorflow结点打包和依赖控制
深度学习库能够充分发挥GPU并行计算的能力,但是有时我们却不得不需要串行.这时就需要用到依赖控制. import tensorflow as tf a = tf.Variable(1) b = tf. ...