学习orm框架及一些看法
首先说说我对现在主流的ORM框架的一些看法:
优点:
- 让程序员不再关注数据库细节,专心在业务逻辑上,程序员可以不懂数据库就可以开发系统。
- 让数据库迁移变的非常方便,如果系统需要更改使用的数据库,直接改配制就好了,不要再管不同数据库之间的语法差异。
- 省时,可快速开发,因为不需要自己写复杂的SQL语句,不需要封装复杂的数据底层,这样可以节省很多时间。
缺点:
- 我觉得不懂数据库的程序员不是好程序员,ORM不能帮你生成所有的业务语句,有些复杂的生成不了,还是需要写SQL,例如复杂的报表。
- 配制过于繁琐,出错后不好定位问题点在哪。
- 性能低,因为它内部是使用了大量反射,还有数据库检测,造成性能必然低下。
- 需要额外的学习成本,虽然不需要学习数据库,但是需要学习ORM语句。
- 容易引起不规范开发,因为ORM可以在任何地方写ORM语句然后调用开发,这样对于初始程序员来说他们很可能在系统的任何地方乱丢ORM语句,这样给维护带来了很大的难度。
因为我一直都不看好这些ORM框架所以缺点写多了点,可能还有些优点是我不知道的,路过的人要是知道可以给我留言,我再补上。
那现在来谈一下我自己的ORM框架,之所以称它为ORM框架是因为,它也达到了上面ORM框架的几个优点。
首先我基于抽像数据操作层,写了一套基于ADO.NET的抽像操作数据库的方法DbHelper

然后基于这个DbHelper 我开发了抽象数据操作引擎,并扩展了不同的数据库支持 这里只显示了mysql的,还有MSSQL,ACCESS其实所有支持ADO.NET的数据库都可以扩展进来

这样做了以后,我的框架就可以做到数据库无关性了,我可以使用任何数据库,甚至可以混达数据库。
现在我再说说怎么快速开发和让程序员不用关注SQL语句。
对于程序员来说,没有比看代码更直接的了,我先给大家看看代码:

这里演示了 增删改查方法,首先这里我没有写一句SQL,也没有ORM语句,写法上应该比较直观,我们数据模型进行了扩展,给字段都加入了属性。
如果我要设置一个字段的值,我就会把它的IsValue设置为真,如果我要查询一个字段我就把它的IsColume设置为真,我个人理解这种方式更接近OOP思想,更直接更容易理解,至少我现在带新人让他们用这个能很快上手,几乎没压力。
这样也避免了初级程序员随便写SQL语句,同时也方便维护和管理,又能快速开发,最主要是性能很高,因为我没用反射,也不需要ORM语句到SQL语句的翻译,同时也可以定制只查询出部分字段(现在好像一些ORM达不到这个效果)。
转自隔壁老王。。。。。。。。。。。。。。
学习orm框架及一些看法的更多相关文章
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
- 我的开发框架之ORM框架
今天我想分享一下我自己的ORM框架,虽然谈不是很好,但我个人认为还是蛮好用的,跟大家分享交流一下. 首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上, ...
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>
转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读 ...
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...
- 轻量级ORM框架——第一篇:Dapper快速学习
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...
- Django学习(三)---Models(ORM框架)
1) Django 中Models是与数据库相关的,与数据库相关的代码一般写在 models.py中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在sett ...
- python(十二)下:ORM框架SQLAlchemy使用学习
此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- ORM框架SQLAlchemy使用学习
参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...
随机推荐
- 组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双向绑定数据
组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双 ...
- hadoop相关资料集锦
1 Hadoop集群系列集锦http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html 2 Hadoop和MapReduce详解ht ...
- OpenCascade:Topo类型转换
OpenCascade:Topo类型转换 TopoDS_Edge newEdge; if (oldShape.ShapeType()==TopAbs_EDGE) newEdge=TopoDS::Edg ...
- 《队长说得队》【Alpha】Scrum meeting 3
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...
- css3中的nth-child和nth-of-type的区别
实例: 首先创建一个HTML结构 <div class="post"> <p>我是文章的第一段落</p> <p>我是文章的第二段落& ...
- 基于matlab的蓝色车牌定位与识别---识别
接着昨天的工作,把最后一部分识别讲完. 关于字符识别这块,一种最省事的办法是匹配识别,将所得的字符和自己的标准字符库相减,计算所得结果,值最小的即为识别的结果.不过这种方法是在所得字符较为标准的情况, ...
- skimage学习(一)
skimage即是Scikit-Image.基于python脚本语言开发的数字图片处理包 skimage包由许多的子模块组成,各个子模块提供不同的功能.主要子模块列表如下: data子模块学习 导入d ...
- rest_framework之status HTTP状态码
Django Rest Framework有一个status.py的文件 通常在我们Django视图(views)中,HTTP状态码使用的是纯数字,像400,404,200,304等,并不是那么很好理 ...
- Python爬虫一
爬虫 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应, 一种按照一定的规则,自动地抓取互联网信息的程序. 原则上,只要是浏览器(客户端)能做的事情,爬虫 ...
- Applied Nonparametric Statistics-lec5
今天继续two-sample test Ref: https://onlinecourses.science.psu.edu/stat464/print/book/export/html/6 Mann ...