1.什么是orm
orm,即object-relational mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的sql语句打交道,只需简单的操作对象的属性和方法。
2.为什么会出现orm思想
先从项目中数据流存储形式这个角度说起.简单拿mvc这种分层模式.来说. model作为数据承载实体. 在用户界面层和业务逻辑层之间数据实现面向对象oo形式传递. 当我们需要通过control层分发请求把数据持久化时我们会发现. 内存中的面向对象的oo如何持久化成关系型数据中存储一条实际数据记录呢?
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的. 两者之间是不匹配的.而orm作为项目中间件形式实现数据在不同场景下数据关系映射. 对象关系映射(object relational mapping,简称orm)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.orm就是这样而来的.
3.优缺点
优势
第一:隐藏了数据访问细节,“封闭”的通用数据库交互,orm的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的sql语句。快速开发,由此而来。
第二:orm使我们构造固化数据结构变得简单易行。在orm年表的史前时代,我们需要将我们的对象模型转化为一条一条的sql语句,通过直连或是db helper在关系数据库构造我们的数据库体系。而现在,基本上所有的orm框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。
缺点
第一:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢orm人的共同点)。现在的各种orm框架都在尝试使用各种方法来减轻这块(lazyload,cache),效果还是很显著的。
第二:面向对象的查询语言(x-ql)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
第三:对于复杂查询,orm仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,having,order by, exists,但是查询条件(a and b and not c and (d or d))。
世上没有驴是不吃草的(又想好又想巧,买个老驴不吃草),任何优势的背后都隐藏着缺点,这是不可避免的。问题在于,我们是否能容忍缺点。
4.常用的orm框架
(1)hibernate全自动需要些hql语句
(2)ibatis半自动自己写sql语句,可操作性强,小巧
(3)eclipselink 一个可扩展的支持jpa的orm框架,供强大的缓存功能,缓存支持集群。
(4)apache ojb等等