Hibernate学习1-什么是Hibernate
来源:互联网 发布:强矩阵管理 编辑:程序博客网 时间:2024/05/02 00:12
什么是Hibernate
Hibernate,字面意思翻译过来就是冬眠的意思,对于对象来说,其实就是数据持久化(Data Persistence)。
我们知道,软件开发中经常用到三层架构模式
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
图1.三层架构图
其中的数据访问层又称数据持久层。而持久化(Persistence),即把数据保存到可永久化保存的存储设备中(如硬盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库、硬盘文件、或者XML文件中等。持久化是程序数据在持久状态和瞬态状态间转换的机制。
JDBC就是一种数据持久化机制,文件IO也是一种持久化机制。
我们可以从以下3个角度来理解Hibernate:
- Hibernate是对JDBC的进一步封装
没有Hibernate时,做持久层开发使用JDBC时,要和大量的JDBC语句打交道以及接触connection的管理。而在Hibernate出现后,只需和Hibernate打交道就可以了。 - Hibernate是三层框架中的持久层
Hibernate是持久层的典型框架,而且持久层的框架还包括:IBatis、Nhibernate、JDO、OJB和EJB等。 - Hibernate是一个开源的ORM框架
ORM(Object-Relational Mapping)即对象关系映射,ORM框架的作用是在关系型数据库和对象之间做一个映射。从对象(Object)映射到数据库,再从数据库映射到关系。这样,我们在操作数据库的时候,无需再和复杂的SQL打交道,只要想操作对象一样操作就可了(具体做法是把关系型数据库的字段在内存中映射成对象的属性)。
Hibernate的核心
图2.Hibernate的核心
从上图可以看出,Hibernate有六大核心接口和两个主要配置文件。图中简单给出了它们之间的关系,Hibernate所有的东西都在这儿了,我们从上到下简单认识一下:
- Configuration接口:负责配置并启动Hibernate;
- SessionFactory接口:负责初始化Hibernate;
- Session接口:负责持久化对象的CRUD操作;
- Transaction接口:负责事务;
- Query接口和Criteria接口:负责执行各种数据库查询。
其中Configuration接口的实例是一个启动期间的对象,一旦SessionFactory实例创建完成它就被丢弃掉了。
Hibernate的优缺点
优点:
- 更加对象化:以对象化的思维操作数据库,我们只需要操作对象就可以了;
- 移植性好:因为Hibernate做了持久层的封装,我们并不知道数据库的具体实现,所写的代码都具有很好的复用性;
- 非入侵性:Hibernate是一个没有入侵性的框架,它无需继承任何类,不需要实现任何接口,具有相同性质的对象称为POJO对象(POJO,Plain Ordinary Java Object的缩写,即简单的Java对象)。没有入侵性的框架我们称之为轻量级框架。
- 测试方便:Hibernate代码测试方便,有效提高了工作效率,提升了生产力。
缺点:
- 对于使用数据库的语句将很难调优;
- 对大批量数据的更新存在问题;
- 系统中存在大量的攻击查询功能。
总结
通过这篇介绍,我们了解了Hibernate的基本信息,在之后的系列文章中,我们会逐渐通过简单的demo学习Hibernate更具体的用法并展开更具体的分析。
- Hibernate学习1-什么是Hibernate
- 什么是Hibernate
- 什么是Hibernate
- 什么是Hibernate
- 什么是Hibernate
- 什么是Hibernate
- 什么是hibernate
- 什么是Hibernate?
- 什么是Hibernate
- 什么是Hibernate
- 什么是Hibernate
- hibernate--1.什么是hibernate?
- 什么是hibernate N+1 问题
- 什么是hibernate中的二级缓存
- Hibernate--什么是持久化?
- 什么是hibernate中的二级缓存
- 什么是Hibernate延迟加载?
- 什么是hibernate中的二级缓存
- jQuery_Ajax: $.ajax()中的常用参数
- 在Jsp中使用<s:if test="">,条件的值是action中设置的session的值
- IDEA 2017.1 基于Maven+SpringMVC的web工程
- IMWeb提升营Day4 | 训练题23:二叉搜索树的后序遍历序列
- Runnable、Callable、Executor、Future、FutureTask关系解读
- Hibernate学习1-什么是Hibernate
- 【Android开发错误系列】URLConnection解析URL的UnknownHostException异常解决办法
- Marklogic学习 —— 安装Marklogic9
- 链表中倒数第k个结点
- 二进制
- POJ1661——Help Jimmy(动态规划)
- C++操作Mysql数据库/Linux下
- 线性代数-【2-(3-4)】矩阵及其运算 (未完)
- Layout布局基础