java orm框架 博客园_ORM框架的前世今生
目录
一、ORM简介
二、ORM的工作原理
三、ORM的优缺点
四、常见的ORM框架
一、ORM简介
ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映射
数据存储是绝大多数软件系统都要接触到的技术,具有一定规模的软件产品,为了方便存储和管理数据,便引入了数据库这一工具,但是数据如何从程序写入数据库的呢?
为方便程序员通过代码将数据写入数据库,一般的语言开发的厂商都会为各种数据库适配数据库连接的驱动程序,比如ADO.Net,JDBC等。
但是数据库连接的驱动程序的职责在于管理连接数据库,设置连接参数等信息,通常会返回各自封装好的数据集类型,驱动程序封装的类型往往是以数据为核心进行描述的,现代化的软件设计为了简便描述事物的特征都而以面向对象思想为核心,两者之间的转换还有很多的路要走。
除却转换部分,Sql语句的编写也是一大学问,一般的编程语言都没有为sql语句定义类型,这是因为每种数据库的sql语句风格都是不一样的,难以给出一个统一的方案。退而求其次,一般的编程语言都采用字符串形式传递sql语句到数据库驱动程序。抛弃各种各样的sql语句的学习之外,这种方式有一个很大的弊端,那就是sql语句的拼写极容易由于手误而犯错。
在这种场景下,ORM框架诞生了!
二、ORM的工作原理
在讲解完ORM的前世之后,我们来聊聊ORM框架为我们做了什么。
在第一节我们提过了,没有ORM的情况下,主要有两个槽点:
1.驱动返回类型和对象不能良好映射
2.SQL语句的学习成本及易错率(多种数据库语句难以全部掌握)
那么,且看我们的ORM如何改善这两个槽点:
1.数据驱动返回的数据通常都是以数据为核心的数据集合,我们需要通过手动将类对象和数据库返回的列数据进行一一匹配获取,然后赋值到对象上。在这里要感谢泛型和反射两大语法,通过泛型和反射,我们可以获取到任何实体类的属性而不是具体到某一种类型,通过遍历实体类的属性去数据集合中一一获取并复制返回。这一操作便将数据集合的数据完美包装成了以面向对象为核心的和类相关的对象数据集合。
2.sql语句的拼写,我们可以提供一套公共sql语句模板,然后在具体实体对象操作的时候将实体对象的属性名称和属性值当作参数拼接进去,组装成完整的sql语句(例如java体系中的Mybatis框架)或者依旧采用封装一套浅显易懂的Api,Api内部通过对应方法和实体对象的组装成sql语句(例如.Net体系中EntityFramework框架)
ORM还为我们做了什么?
最重要的两个问题解决完之后,我们可以在框架中做一些对我们有帮助的其他事情。ORM框架做的最多的便是“缓存”。
作为程序员应该掌握的基础知识,数据库操作是要和硬盘打交道的,而程序是在内存中运行的,操作内存的速度要比操作硬盘快数十倍以上,可见一个访问量较高的大型系统很容易由于数据库操作过于频繁而拖慢整体速度,从而影响系统的使用。因此,ORM框架要帮助我们减少数据库的访问,加快系统速度。
ORM框架的缓存系统一般是较为复杂的,而且每种ORM框架对缓存的实现机制都是不同的。整体的思路却是一致的,对访问频率较高的数据进行缓存,并在对数据编辑的时候要对缓存进行更新,以免出现数据不一致的问题。详细的缓存实现策略这里不一一赘述,感兴趣可以针对某个ORM框架进行剖析。
三、ORM的优缺点
通过上面两节的描述,我们很容易总结出ORM框架的优缺点。我们先来说说优点。
ORM框架降低了学习门槛,一个对sql语句并不熟悉的开发人员也可以很容易通过简易的ORM框架Api进行数据库的操作。
提高了开发效率,ORM使我们减少很多繁琐重复的工作量,让我们的注意力集中在实现业务上。
一定程度上提高了程序的响应速度。
ORM框架的弊端也很明显,框架会自动生成Sql语句,所有场景的sql语句都是同一套模板,难以自动针对场景对sql语句进行良好的优化,某种场景下很容易生成执行很慢的sql语句。如果让DBA看到这样的执行sql,必定引来抓狂崩溃。
ORM框架只是为了满足绝大多数的场景而生的,特殊需要优化sql的场景下,我们完全可以直接使用驱动手动执行sql或使用ORM框架内提供的sql语句api进行自定义sql语句。
四、市面常见的ORM框架
.Net体系:
EntityFramework,功能强大,lambda api,有些庞大臃肿,很多功能用不上
Dapper,轻量级,数据库种类支持丰富,sql写法灵活,运行速度快
CYQ.Data,自动化,日志,分布式缓存,弱类型,api简介
Java体系:
MyBatis,映射采用Xml配置sql,多种映射关系灵活配置,sql需要手动编写到配置,轻量级,半自动
Hibernate,Xml配置sql,支持HQL语句,移植性好,日志,重量级,功能全,全自动
Speedment,lambda api,依赖java8
java orm框架 博客园_ORM框架的前世今生相关推荐
- 潜移默化学会WPF(绚丽篇)--热烈欢迎RadioButton,改造成功,改造成ImageButton,新版导航 - AYUI框架 - 博客园...
潜移默化学会WPF(绚丽篇)--热烈欢迎RadioButton,改造成功,改造成ImageButton,新版导航 - AYUI框架 - 博客园 原文:潜移默化学会WPF(绚丽篇)--热烈欢迎Radio ...
- java课程设计 博客园_Java课程设计博客(团队)
Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 4. 项目git提交记录截图 5. 项目功能架 ...
- java orm框架 博客园_自己写ORM框架 DBUtils
ORM框架想必大家都比较熟知了,即对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同 ...
- java oxm_OXM - csnmd - 博客园
O/X Mapper 是什么? Spring 3.0 的一个新特性是 O/X Mapper.O/X 映射器这个概念并不新鲜,O 代表 Object,X 代表 XML.它的目的是在 Java 对象(几乎 ...
- 触发器和java的关系_触发器-1 - java ee spring - 博客园
------------------------------------环境代码 create table student (stuid varchar2(10) not null, stuname ...
- java课程设计 博客园_java课程设计
Java程序设计 课程设计 3.本人负责的主要功能展示与代码分析 //这是一个文件夹类 public class Folder { private String name;//文件夹的名称 priva ...
- java bag_Java - T---bag - 博客园
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表 ...
- java mysql 删除 博客园_mysql的增删改查
增: 新增记录(部分字段):insert into table (字段1,字段2--) values(value1,value2,--) 新增记录(全部字段):insert into table v ...
- java 网络编程 博客园_java网络编程
1.计算机网络基础 OSI参考模型(开放系统互连参考模型): 物理层:物理层处于OSI的最底层,是整个开放系统的基础.物理层涉及通信信道上传输的原始比特流(bits),它的功能主要是为数据端设备提供传 ...
最新文章
- linux单步跟踪命令,dbx调试跟踪的常用子命令
- Docker Review - Docker 部署 Spring Boot 项目
- 动手学无人驾驶(7):车道线检测
- 计算机课是一体化教学吗,计算机基础课程理实一体化教学模式
- linux程序 option,long-option.c/解析命令行参数
- 移动魔百和系统升级服务器地址,【当贝市场】移动魔百盒升级后无法观看视频怎么办...
- 南京大学计算机考研复试名单,南大的考研复试名单能查出来吗?
- HTTPD虚拟主机配置
- Verizon的野望
- 云打码实现验证码识别
- 谈谈Google AdSense以外的国外优秀广告联盟
- oppoa5降级教程_OPPOR11S线刷降级旧版本可以吗?Colors版降到3.2没问题
- 痛心!又一中产家庭倒下,为什么我建议你不要轻易买保险?
- Hibernate持久化对象生命周期之实战探索
- win10升级win11后电源设置里面找不到休眠功能
- powershell:调用7z,haozip解压缩文件
- php json_encode后乱码,PHP中json_encode后中文乱码的解决方案
- 一文入门大规模预训练语言模型丨“悟道之巅”公开课实录(1)
- 轻微课学画画好不好:我的体验反馈
- Marvelous Designer 10 MAC 版 MD 10 下载 ( 支持 Big Sur )
热门文章
- 智慧城市炫酷效果、threejs绘制道路、shader实现道路流光效果
- 2021年P气瓶充装考试试卷及P气瓶充装模拟考试题库
- Word输入特殊字符正负号±
- IDEA代码生成Generate
- Linux pinctrl子系统分析之三 数据结构分析
- ubuntu 安装完oracle之后没有sqlplus,Ubuntu12.04(amd64)装完Oracle11gR2后各种问题解决方法...
- 社区活动|隐语成长报告,好礼回馈社区
- 沁恒CH32V307单片机入门(02):官方库与工程模板介绍
- 【颜纠日记】windows伪装文件夹技巧/文件无法打开
- mac新手必备之mac常用快捷键整理