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 多线程开发
在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反, ...
- jackson的简单使用(可转xml)
参考文章:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html (原文章更详细哦,且有介绍xml与java对象的互转) 参考文章作 ...
- Win8 使用VC6.0调试
Win8.1下无法执行vc++6.0的解决方法 注意 安装过程中最后一步会卡在那里不动,能够直接关闭安装程序,忽略报错. 1 安装完毕后在安装文件夹下找到MSDEV.EXE 而且将 MSDEV.EXE ...
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...
- 使用 React 和 Flux 创建一个记事本应用
React,来自 Facebook,是一个用来创建用户界面的非常优秀的类库.唯一的问题是 React 不会关注于你的应用如何处理数据.大多数人把 React 当做 MV* 中的 V.所以,Facebo ...
- 【枚举+数学】【HDU1271】整数对 难度:五颗星
整数对 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- java学习之部分笔记2
1.变量 实例变量和局部变量 实例变量系统会自动初始化为0和null(string),局部变量必须设定初始值. 静态方法里只能引用静态变量 数据类型的自动转换! int—>long 2.构造方法 ...
- Identity 验证,Authorize 特性
多类型角色访问 //[Authorize] //[Authorize(Roles = "User")] //[Authorize(Roles="Administrator ...
- Linux下重要日志文件及查看方式
http://os.51cto.com/art/201108/282184_all.htm 1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...
- Python和C#基本算法实现对比
最近在学习python,很多入门的例子又写了一遍,基本上是C#和Python都写了一遍,对比发现语言真是相通啊,只是语法不同而已. python开发也是用的VS,很好用,特别是代码段运行,选中一段py ...