Hibernate征途(二)之基础与核心
根据我司优良传统,必然要由上向下、逐级深入,所以在钻到Hibernate细节之前,先从宏观上行欣赏一下Hibernate。为什么说是欣赏?大家可以自行查阅一下Hibernate知识外的信息,创始人和Hibernate的来源都挺有意思。
ORM
众所周知Hibernate是ORM框架,等等,先来说一下ORM,即Objcect Relation Mapping,对象-关系映射,我认为这是Hibernate的操作核心,这个上篇博客简单阐述了一下,学Hibernate时刻注意这点。
优缺点
单纯地说一个框架的优缺点没什么用处,但是当结合使用时,知道其优缺点可以将其优势最大化,同时避免使用上的错误或不当。
优点
- 减少了代码:框架封装了一些常用的增删改查,减少代码的同时,也意味着减少了代码的维护。
- 更加专注:使用面向对象的思想操作数据库,使得开发人员可以不再或减少对数据库表的注意。
- 容易移植:因为Hibernate是轻量级的框架,与容器、环境无关,使得它容易移植。
- 容易测试:相对于传统的sql语句,存在于程序中,使得它更容易测试、调试。
缺点
- 大量数据库特性使用:hibernate的CRUD操作,半壁江山是以session的save()\load()等实现,而这些不支持数据库特性,hql支持也有限度,况且如果使用,与hibernate容易移植的有点也相悖。
- 大批量数据操作:当大批量操作数据时,需要大量的更新缓存,很有可能导致内存溢出(缓存部分讲解)。
基本组件
对应用程序而言,其Hibernate组件可以分为四部分:
- 实体类:数据持久单位,以对象的格式保存数据。
- 映射文件:O到R的转换规则,属性到字段、对象到表的映射。
- 配置文件:对Hibernate整体的配置内容,如数据库、用户名等。
- 辅助工具:hibernate及引用的工具包等。
核心接口
来看一张图:
Interceptor和UserType不熟悉,主要来说一下在开发中常用的另外5个核心接口:Configuration、SessionFactory、Session、Transaction、Query。
- Configuration,在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
- SessionFactory,负责初始化Hibernate,创建session对象,它是线程安全的。
- Session,负责执行持久化对象的CRUD操作,它不是线程安全的,当然,这个session不同于Web开发中的session
- Transaction,负责事务相关的操作,可用可不用。
- Query,支持HQL和SQL语句进行数据库操作。
三种状态
理解Hibernate的三种状态,可以更好的理解Hibernate运行机制,在此简单说明一下,会在后续博客中详细说明。一个对象在Hibernate中呈现的状态,可以分为三种,瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。看图:
我从jvm回收和session管理两个方面来说一下这三个状态:
- 瞬时态(Transient),我觉得之所以称之为瞬时态,是因为其刚被new出来,没有被引用,也没有纳入session管理,随时可能被虚拟机回收,可能只是瞬时存在。
- 持久态(Persistent),称之为持久态,是因为它纳入session的管理之中,这样的对象具有数据库标识,与数据库记录相对应,可以长久存在。
- 脱管态(Detached),如其名,以前被session管理过,但是已经脱离了session的管理,与瞬时态的唯一区别,我认为是它比瞬时态多一个标识,同样可以被jvm回收。
总结
我能说到这里,这篇博客结束了么?淡定,以上加入了我自己的理解,不是对知识单纯地罗列,是对Hibernate一个宏观的介绍,后面的博客涉及的会是细节的部分,敬请期待.
Hibernate征途(二)之基础与核心的更多相关文章
- Hibernate征途(三)之CRUD
上篇博客<Hibernate征途(二)之基础与核心>介绍了Hibernate的基础内容和核心内容,这篇博客简单实践一下.第一篇博客也说过Hibernate是一种JDBC的简化方案,既然是和 ...
- Hibernate征途(一)之初识
相见恨晚 很久以前,大概从开始接触数据库开始,就闪过这样一个想法,怎么看怎么觉得数据库表和vb的类模块很像,不是么?除了vb类模块还有函数外:越往下学觉得二者越像,尤其在三层时学到实体类的概念,我去, ...
- Mina 系列(二)之基础
Mina 系列(二)之基础 Mina 使用起来多么简洁方便呀,就是不具备 Java NIO 的基础,只要了解 Mina 常用的 API,就可以灵活使用并完成应用开发. 1. Mina 概述 首先,看 ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换
原文:利用WPF建立自己的3d gis软件(非axhost方式)(二)基础状态切换 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密 ...
- 探究UE4网络系列(二)、UE4网络核心类分析
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 前面分析了网络核心的基础类Socket/BSDSocket/SocketSubsystem/SocketSubs ...
- Solon详解(二)- Solon的核心
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
- LINUX二十个基础命令
LINUX二十个基础命令 一. useradd命令 1.命令格式: useradd 选项 用户名 2.命令功能: 添加新的用户账号 3.常用参数: -c comment 指定一段注释性描述.-d 目录 ...
- Hibernate征途(七)之复合主键映射和集合映射
把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...
随机推荐
- Linux 文件
Linux系统中:.a文件是静态链接库文件.所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了 ...
- PHP MySQL 创建数据库和表 之 Create
创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. 语法 CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 my ...
- 云脉提供表单识别API接口自助接入
如今随着信息化.数字化时代的到来,利用纯人工进行数据录入已经不能满足海量信息数字化的需求.这时候有OCR表单识别技术,一切问题都能够迎刃而解了.云脉表单识别SDK采用成熟的OCR技术,通过创建票据的模 ...
- 上传form表单
<form name="theForm" method="post" action="index.php?m=back&c=Goods& ...
- UGUI Scrollbar控件
如题就是Scrollbar控件,它简单可以看成 Scrollbar 和 Image组件组成 它基本上不单独使用多数是制作滚动视图.我们来看看他独特的属性,重复的属性就不在介绍了! 属性讲解: Hand ...
- 使用spring 并加载模板发送Email 发邮件 java 模板
以下例子是使用spring发送email,然后加载到固定的模板,挺好的,大家可以试试 需要使用到spring-context 包 和 com.springsource.org.apache.veloc ...
- 跟我一起学extjs5(18--模块的新增、改动、删除操作)
跟我一起学extjs5(18--模块的新增.改动.删除操作) 上节在Grid展示时做了一个金额单位能够手工选择的功能,假设你要增加其它功能.也仅仅要依照这个模式来操作即可了,比方说你想 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- 在C#中使用CastleDynamicProxy 实现AOP
原文链接:Aspect Oriented Programming (AOP) in C# using CastleDynamicProxy 本文主要展示在C#中如何使用Castle Dynamic ...
- html基础之 input:type
Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍.1,type=text输入类型是text,这是我们见的最多 ...