ORM对象关系映射,对象即实体,关系即关系数据库表,ORM即实现从实体对象关系数据库数据的映射。本质上就是将数据从一种形式转换到另一种形式。它具体又有哪些表现呢,咱们一步步学习,一步步分析。
ORM解决了什么问题?
想想以前使用的三层开发,在D层对数据库的操作基本可以归纳为以下几点问题:
1、使用DataSet/DataTable填充返回数据。
DataSet的结构就相当于一张表,使用DataSet ,需要取得某一数据时是必须要知道表结构的(列名或者列的序号),这不仅违反了三层分层的思想,也不符合面向对象的特点,因为DataSet是一个只知道存储行和列的对象,并且不能像实体那样获取属性,也不能像DataSet添加方法。但是DataSet并不是一无用处,它也算是神级的存在吧,使用方便,适合业务简单,小型的开发。
2、将DataSet/DataTable转化成实体及实体集返回(反射及泛型)。
解决了面向对象的问题,但问题远不止如此。
3、重复的方法,除了sql语句和实体不同外,其他的都一样。
4、即使用了抽象工厂加反射,如果要更换数据库,还需要写一套其它数据库的D层。
综上所述,DataSet非面向对象的特点,sql语句使业务逻辑(包括D层)与数据库之间形成高耦合,使得代码复用性低,维护繁琐,更换数据库工作量大等等一些问题。那有没有方法解决以上问题呢?——ORM
核心理念
来看看ORM核心理念:
1、简单:ORM以最基本的形式建模数据。比如ORM会将数据库的一张表映射成一个实体类,表的字段就是这个类的成员变量
2、精确:ORM使所有的数据表都按照统一的标准精确地映射成实体类,使系统在代码层面保持准确统一
3、易懂:ORM使数据库结构文档化。数据库被ORM转换为了程序员可以读懂的实体类,程序员可以只把注意力放在业务对象。
4、易用:ORM的避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。
.NET中的ORM框架
NHibernate,EntityFramework,这两种框架后续博客在研究,他们也是对ORM的实现,并且包含了事务,缓存,延迟加载等等。
其实对ORM更多的还是疑问:
1、ORM不用自己写SQL语句,但是一些复杂的,特殊的sql查询呢?
2、实体和关系如何映射在一起的?
3、Attribute特性
4、Linq,Lambda表达式
小结
为什么用ORM已经说的很明白了,对比以前的开发以及维护的经历,ORM能够够给我们的好处很多。ORM一步步深入研究中。
本文也是根据自己以往的开发经历和最近对ORM的研究总结的,新手入门,多多指正!