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

小程简介

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

前言

小程故事

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

话说十年磨一剑,这次分享关于打造一款人见人爱的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进行调试运行进行测试。

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

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

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

 

【ASP.NET程序员福利】打造一款人见人爱的ORM(一)的更多相关文章

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

    上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...

  2. 代码片段添加智能提示,打造一款人见人爱的ORM框架

    SqlSugar ORM优点: 1.高性能,达到原生最高水准,比SqlHelper性能要高,比Dapper快30% 比EF快50% 2.支持多种数据库 ,sql版本更新最快,其它会定期更新,可以在多种 ...

  3. 深受C/C 程序员欢迎的11款IDE

    几十年过去了,C和C++作为主要的高级的程序设计语言,在全球范围内仍然广受欢迎,并牢牢占据着TIOBE编程语言排行榜前5名,应用程序和系统的开发离不开这两门语言,现在我们来总结一下近些年来,深受C/C ...

  4. 优秀ASP.NET程序员修炼之路

    初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够.不全面. 写给机器的程序,往往追求的是运行正确.执行效率能满足要求.但程序员的任务仅仅 ...

  5. Java程序员必备的6款最佳开发工具

    工欲善其事,必先利其器.每一个Java程序员都有其惯用的工具组件.对于Java程序员,各种有用的软件和工具泛滥成灾.初级开发人员要么找不到合适的工具,要么在寻找过程中浪费了大量的时间.下面,我将为大家 ...

  6. 程序员简单打造一个灵活智能的自动化运维系统C#实例程序

    你是一个程序员,被派去管理公司500台计算机.这些机器可能需要执行一些自动化任务,一台台手动操作会把你累死.重复性的工作还是交给电脑处理,怎么解决这个问题呢?一个自动化的运维系统是必须的.自己实现的好 ...

  7. asp.net程序员初涉node.js

    之前一直听说node.js在处理网站大规模并发上十分有用,所以有一定规模的公司都在使用node.我在工作中只用过jquery,属于那种边做功能边学习的那一种.甚至连原生的js都不太会写,只是知道语法差 ...

  8. PHP程序员福利“看免费直播,学MySQL索引优化”

    六星教育了解到,MySQL是目前所知PHP最流行的关系型数据库管理系统之一,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.之所以它会成为主流使用数据库,这 ...

  9. 对ASP.NET程序员非常有用的85个工具

    介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具. 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Stu ...

随机推荐

  1. (十五)使用Nexus创建Maven私服

    通过建立自己的私服,就可以降低中央仓库负荷.节省外网宽带.加速Maven构建.自己部署构件等,从而高效的使用Maven.有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:Apache基金会的 ...

  2. (五)什么是RDD-Java&Python版Spark

    什么是RDD 视频教程: 1.优酷 2.YouTube RDD是个抽象类,全称为Resilient Distributed Datasets,是一个容错的.并行的数据结构,可以让用户显式地将数据存储到 ...

  3. nodejs安装和环境部署

    windows 下: 1. 下载windows平台nodejs环境安装包,百度一下nodejs官网,找到DOWNLOADS点击,找到Windows Installer 如果为64位电脑可以选择64位版 ...

  4. Centos7安装完毕后无法联网的解决方法

    /etc/sysconfig/network-scripts/ 用ls命令查看网卡配置文件名(在CENTOS7中网卡名貌似变成了随机数字,所以每台机器的网卡名并不相同)

  5. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

    1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...

  6. 安装.NET Framework进度条卡住不动的解决方案

    VS在安装之前需要安装.NET Framework,我安装的是4.0版本.但是安装进度条到一半左右时就卡住不动了.前前后后重试多次,还有几次重新开机,但都没用. 开始还以为是安装的系统有问题.后来在网 ...

  7. 【msql】关于redo 和 undo log

    InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性.和大多数关系型数据库一样,Inno ...

  8. 创建docker私人仓库

    关于创建docker私人仓库 1.1.           安装步骤 1.1.1.            直接从公共库上面下载register镜像在本地执行 1.1.1.1.             ...

  9. 常用算法——排序(一)

    排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难.同样,存储在计算机中的数据的次序,对于处理这些数据的算法的 ...

  10. codevs 1472 体检

    题目描述 Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 只是公司的一个码农 郑厂长所在的公司每一年都要组织员工体检,比如量身高体重.测血压之类的,今年也不例外. 这次总共有 ...