【ASP.NET程序员福利】打造一款人见人爱的ORM(一)

 

      “不少人都不太承认以第三方ORM,由于考虑的点不够全面,没有大用户群体的ORM有保证,这点是不能否认确是事实。可是每每用户群体大的ORM又有不足之处,今天咱们就来聊聊关于ORM的话题,打造一款人见人爱的ORM框架。git

 

小程简介

      季健国(蚂蚁Ant)10年的工做经验, 7年的IT经验是一枚名副其实的屌丝程序员。技术无边界,编程靠思想。由于对这份职业的热爱,因此我到如今还在一直从事这份职业。目前主要研究方向为ORM底层核心,爬虫,WebAPI,SOA,Docker,Xamarin,微信小程序,微服务架构;我的爱好:阅读,跑步,打羽毛球,撸代码;欢迎有同共爱好的小伙伴为友加我QQ:181589805程序员

 

前言sql

小程故事

      在这十年的技术生涯中,须要走过多少路,从中得到坎坷成长。我和许多技术人同样,曾经徘徊过,也迷茫过。这十年里的成长谈不上有什么丰功伟绩,天然就谈不上什么技术大牛,我只是想把本身的所见所闻亲身经历的点点滴滴作一些总结。由于这中间有太多的成长感悟,我也会将把本身所学到的技术以及踩过的坑逐步分享给你们。但愿能为有一样成长过程当中的朋友产生共鸣,帮助你们少踩一些坑。数据库

     话说十年磨一剑,此次分享关于打造一款人见人爱的AntORM框架,也算是我这十年当中磨出来其中一把剑。今天分享出来但愿能够帮助正在成长中的农码们,为项目尽量缩短开发周期以及提升工做效率。让你们也尽可能摆脱经常因需求的变化,致使无休此的加班一直撸呀撸。由于每每选择一个好的框架,才是你应对需求变化能够做出快速上线带来帮助,这样也能让你减小加班,多一点时间陪陪家人。编程

     此次是我第一次作这样的分享, 之后我还给你们分享个人一些好的框架。这边也呼吁一下你们,但愿能汇集到一批志同道合的小伙伴们入群(QQ群号:20870428)相互交流一块儿成长。小程序

     项目地址:https://git.coding.net/jjg0513/AntORM.git 或者进群网盘里有完整可运行的项目文件微信小程序

 

我为何还要造这个轮子缓存

 

       可能你们都会有一个疑问:“目前市面上这么多ORM框架层出不穷,为何还要花代价再造这套ORM框架?”。也正由于市面上ORM框架不少花样百出,但使人满意的ORM框架倒是少至又少。接下来我会从入门阶段到兴趣阶段再到开发阶段进行讲述造轮子的过程。微信

       其实我对ORM框架接触的时间也比较长,刚入道的时候就已经开始在用ORM框架了。回想起来,我最先接触ORM大概是在2008年富深协通项目中用到ORM框架。如今看来那时候的项目也写了一些最简单的ORM框架,ORM的使用也都是在一些老前辈们指引下照葫芦画瓢,毕竟那时候对ORM也没有什么概念,天然也就不懂ORM什么原理,当时也是刚入行不久。在此以前项目都是直接写SQL语句来操做数据库,而ORM框架能够直接给实体进行赋值调对应的方法,就能够对数据库进行操做,以为能够少写很多代码维护项目也很方便。再后面的项目中又用到SubSonic框架,这也算是我用到稍微有模有样的ORM框架。但用起来配置仍是很烦索,对数据库的约束也太多并且每一个表都要有固定几个字段复杂性就不用说了,相对于一个刚入行的新手用起来有点痛苦。架构

       我对ORM框架有着浓厚的兴趣是2010年在淘常州项目中,让我有更深刻了解到ORM框架底层的原理。由于当时发现他们的项目不是用的第三方ORM框架,而是用他们本身写的ORM框架,这套框架使用起来要比以前接触的ORM框架要方便不少,因而在空余时间的时候,我就把项目里面的DLL文件反编译成源码,就对ORM的底层和实现进行一翻研究,也就从那时候我开始就对ORM框架产生浓厚的兴趣。有点点想写一套ORM框架的冲动,惋惜那时候本身感受尚未能力去写一套ORM框架。

       对项目快速变化没有ORM框架的痛苦是2013年在同程旅游的项目中。以前一直都在常州工做生活,也是一次偶然的有机会去苏州全新的开始,让我有幸进入同程旅游景区研发团队。本来觉得进这样千人研发团队,应该有它们本身比较牛的ORM框架来学习一下。进去以后却发现我接触的大部分的项目都是没有用ORM框架,基本都是简单三层加SOA的架构来实现,不过我是以为他们的SOA框架比较不错的。居据说也一些大牛从JAVA开源的SOA移植过来的,之后有机我再给你们分享关于他们的SOA框架。当时他们的项目都是用SQL语句来实现,也许是由于直接写SQL语句要比ORM去解析SQL语句的效率要高。但随着不断扩张,致使需求经常在变化,这样数据库字段也是会随之增长或减小,就会让项目从实体层、数据层、业务层、页面层统统改一遍。因此那时候我天天就是苦逼加班撸代码,就想要是能在项目用上ORM框架那该多好,最起码能解决不用这样苦逼一直加减字段全部地方都要改,提及来都是泪......只能认命去承受现实的痛苦,那时候也就下定决定要本身搞一个好的ORM框架来提升工做效率和性能的想法,毕竟在这以前我也接触了很多ORM的框架了。因而,完全激发个人想写一套ORM的念头,因而就利用空闲不要加班的时间就开始在网上查资料,找一些开源的ORM框架来研究以及学习它们好的思想,从中提取一些好的核心开始造轮子之旅。

      总算功夫不负有心人,用了差很少一年的时间,一套属于本身的ORM框架也就问世。最初个人ORM框架也只是能实现一些基本的增删改功能,但我已经很满意。我就把ORM框架运用本身的项目中,可是,长此以往,问题就出现了当访问量大的时候就会出现很慢,说明在性能方面仍是有缺陷的。后来就仔细分析了代码和在网上查了一些资料,发现是因为大量用了一些反射和装箱拆箱操做致使性能降低。因而开始加入一些缓存技术,当项目启动时会把全部实体属性先进行遍历放到缓存中去,后面再使用该实体的一些属性就直接到缓存中取。这样效率和性能放面上获得大大改善,但在多表查询上面还不能实现。只能经过视图来代替,缺陷就是若是项目里面视图多了也很难维护。没办法当时我也算是已经用尽本身的洪荒之力,只能实现这么多了。

      直到2015年我到景尚集团的一个项目中用了EF框架,虽然以前也听过这框架但尚未真正使用过,这个ORM框架必竟是微软本身的框架,至于微软的东西你们都懂的,就是过于宠大想要用好它,没个一年半载的是驾驭很差这玩意,我也便进行了一翻学习开始使用,以后发现Linq语句能实现很好的多表关联查询。因而我就开始借鉴Linq的写法来让本身的ORM框架也慢慢的实现数据库多表查询,而且支持lambda表达式。就这样个人ORM框架也能实现了多表查询的方法,最近总算把一套接近完美的ORM框架打造问世了。掐指一算先后总共花了差很少有三年左右时间,全是利用了一些本身的空余时间不断打磨完成的。也但愿从此这个ORM框架能给你们在项目带来帮助,真正作到让使用者简单、轻量、高效。

      其实有时去重复造轮子并非一件坏事,经过造轮子检验本身是否真的懂,每每听到的、想到的和作出来彻底不同。并且找本身感兴趣的去作,事实证实兴趣不只是最好的老师,仍是让你任劳任怨前进的动力。但我这里并非鼓励你们去造轮子,由于这里面造轮子的过程当中的心酸只有经历过才能体会到。

     若是上面还不足以让您明白我为何要造这个轮子,那最后我要告诉您的是:由于我是一枚任性的程序员,我就是喜欢造本身的轮子!

 

什么是ORM

 

      在介绍AntORM框架以前,先给你们科普一下什么是ORM,若是你是大鸟对ORM很了解能够直接绕道进行下一个环节AntORM架构的介绍。对象关系映射(英语Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换。从效果上说,它实际上是建立了一个可在编程语言里使用的--“虚拟对象数据库”。简单的说:ORM是一种工具,能够自动地把领域对象数据存储到关系型数据库(如MS SQL Server),而不须要大量的编码。

 ORM包含三个重要的部分:

  1. 领域对象(Domain class objects):咱们定义的类。

  2. 关系型数据库对象(Relational database objects):数据库表,视图,存储过程等。

  3. 映射信息(Mapping information):领域对象与关系型数据库对象之间转换的信息。

  ORM容许开发者把数据库设计和领域对象设计独立开,让程序更具备可维护性和可扩展性。

  它还提供了基本的增删改查的功能,开发者不须要手动再编写这部分代码。

      一个典型的数据库与应用程序的ORM交互以下图所示: 

 

 

 

AntORM框架的介绍

 

      AntORM是打造一款人见人爱的轻量、高效的.NET C#数据库访问框架(ORM)。目前AntORM能够支持五种数据库。AntORM主要借鉴了Linq语法以及借助lambda 表达式来实现利用实体生成SQL语句,能够彻底用面向对象的方式就能轻松执行多表链接查询、分组查询、聚合查询、插入数据、批量删除更新、数据库事务和分表分库灵活切换等操做。彻底不须要拼接sql,开发容错率极高。固然也提供原生sql查询。并且开发者彻底能够根据请求实体和响应实体来调用AntORM中提供的方法跟踪每一个方法执行时间和执行SQL语句。框架设计主打轻量、用法简单,无第三方依赖。AntORM的任务就是将关系型数据库中的数据经过ORM层映射为对象,使之可以应用于面向对象程序,方便编程。您能够经过上面提供的项目地址进行下载Demo进行调试运行进行测试。

它确实为大多数程序员提供了便利:
   一、程序员不须要再动手写SQL语句,或者说大部分状况下不须要动手写,只须要调用一系列函数便可完成数据库CURD操做。
   二、对不一样数据库管理系统的链接以及操做进行了抽象,程序员彻底能够不考虑使用的是什么数据库以及数据库的版本。
   三、对数据库应用方便,同一个项目中能够支持同时多数据库,以及数据读写分离都支持数据库,配置简单易操做。
   四、每一个方法均可以根据执行操做数据库返回的实体,能够跟踪方法所执行的SQL语句和执行所消耗的时间。

   总之,在项目开发中,它的确为咱们带来了高效的开发效率。

 

    今天就先分享到这边,接下来我会教你们如何使用这套AntORM框架,敬请期待!若是你们有任何疑问能够留言,或者好的建议能够随时联系我。在此谢谢!

相关文章
相关标签/搜索