打造一款人见人爱的ORM(一)

      “很多人都不太认可以第三方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框架,虽然之前也听过这框架但还没有真正使用过,这框架必竟是微软自己的框架,大家懂微软的东西就是过于宠大想要用好它,没个一年半载的是驾驭不好这玩意,我也便进行了一翻学习开始使用,之后发现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框架简单做以下几点介绍不贴详细的代码了,您可以通过上面提供的项目地址进行下载Demo进行调试运行进行测试。

1,数据库的配置

在数据库配方面,完全可以实现一个项目多数据库操作以及读写库分离都可以支持,目前支持五种数据库的操作(MySQL,MsSQL,Oracle,SQLite,Access),而且支持对数据库连接配置的加密。具体的配置如下图所示:

2,AntORM对数据库的查询操作

有待完成

3,AntORM对数据库的新增操作

有待完成

4,AntORM对数据库的修改操作

有待完成

5,AntORM对数据库的删除操作

有待完成

 

时间: 2024-08-24 17:34:47

打造一款人见人爱的ORM(一)的相关文章

打造一款属于自己的web服务器——最后的一点完善

上一篇我们通过反射实现了动态加载多个controller,就功能上来说整个项目已经基本上完成了,但是目前我们仍然还有一些问题,例如模板支持不好.很多配置信息硬编码不好修改.此外,我们预期的目标是实现一个可嵌入的jar,以实现web服务,而就目前而言明显是不行的.那么我们现在就来解决这些问题. 一.使用velocity拓展模板    想要实现一套完善的模板还是比较麻烦的,所以目前我们考虑使用java支持的模板来实现,目前比较常用的有Freemaker,Velocity等,因为比较熟悉velocit

打造一款属于自己的web服务器——从简单开始

距离开篇已经过了很久,期间完善了一下之前的版本,目前已经能够完好运行,基本上该有的功能都有了,此外将原来的测试程序改为示例项目,新项目只需按照示例项目结构实现controller和view即可,详情见: easy-httpserver. demo-httpsrever.    这次我们将首先来实现一个简单版本,该版本只包括一些基本的功能,后续版本也将在此基础上一步步改进. 一.准备工作 俗话说的好,工欲善其事,必先利其器.我们在开始开发之前应做好如下准备(真的很简单): java开发环境,IDE

从手游测试的角度,如何打造一款好游戏

5月15日,TestBird COO卫少峰在重庆西游汇创业咖啡,携手曲速资本投资总监Jerry.天象互动副总裁蒙琨.墨灵科技CEO白亮等一众大拿,参加“重庆移动游戏DEMO秀”并根据TestBird手游云测平台一年多来的游戏与测试经验,介绍了从手游测试的角度,如何打造一款好游戏. 开场卫少峰向现场开发者抛出了三个问题: 1.好游戏的兼容性到底如何? 2.大部分游戏得不到高分,为什么? 3.如何做好游戏的兼容性? 问题提出后引起了在场开发者们的热烈讨论,而卫少峰在随后的讲话中说出了问题的答案. 好

想打造一款成功的移动应用?你最需要关注性能指标!

其实,对于做应用开发的团队来说,有一件事非常清楚,就是如果想做一款成功的五星级移动应用,真的需要经历一段漫长的旅途.开发.测试以及发布移动应用程序只是走向成功的第一步.国内 APM 领域新兴领军企业 OneAPM 建议开发者一定要重点关注移动应用的性能指标. 诚然,想打造一款成功的移动应用绝非易事,我们需要很多评判标准.我们暂且不管如何来定义成功:你希望打造品牌也好,挣更多的钱也罢,还是为了获得更多的用户.总之,你都需要正确的衡量标准,只有这样你才能不断地优化应用程序,或者说完成对应用程序进行升

CRL开发框架发布啦,一款面向对象的ORM业务框架

CRL是一个面向对象的轻便型ORM业务框架数据处理使用了对象/数据映射,数据操作采用Lamada表达式来表示,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作数据连接以编程方式进行配置,支持多个数据库,参见Global.asax中实现,首次使用请更改LocalSqlHelper.CreateDbHelper中数据连接通过业务对象封装继承,实现业务重用性,比较常用的封装有,会员/账户系统,字典配置,分类系统,在线支付,订单/购物车,权限验证/菜单系统等等,当然也可以写自已的

如何打造一款出色的APP

本文主要是讲述如何打造一款出色的APP,更多android开发技术专业知识,请登陆疯狂软件教育官网. 在这个移动互联网时代各种各样的APP层出不穷,有的APP从始至终就没有被用户接受.有的APP火爆一时最终也是昙花一现.APP是O2O.移动支付.游戏等领域在移动端不可缺少的载体,那么如何打造一款出色的APP成了众多创业者关注的话题.环球漫游APP从“冷启动“到现在被众多用户接受并使用,这其中指定会有很多宝贵的经验.下面环球漫游CTO杜长伟给我们分享APP创业干货,从中,我们可以了解打造一款出色的

[原创]jquery+css3打造一款ajax分页插件

最近公司的项目将好多分页改成了ajax的前台分页以前写的分页插件就不好用了,遂重写一个 支持IE6+,但没有动画效果如果没有硬需求,个人认为没必要多写js让动画在这些浏览器中实现css3的动画本来就是帮我们取代js中这部分动画代码的使js更纯粹地去实现逻辑 效果图如下: 调用代码如下: 包括常用的加载失败重试,参数可配置是否能手动输入页码,设置按钮数目,可以调用多个page等等,调用代码很简便 <script type="text/javascript"> var kpag

[原创]zepto打造一款移动端划屏插件

最近忙着将项目内的jquery 2换成zepto 因为不想引用过多的zepto包,所以花了点时间 zepto真的精简了许多,源代码看着真舒服 正好项目内需要一个划屏插件,就用zepto写了一个 逻辑其实很简单,但没想到测试时,在老版本android设备浏览器上的touchmove有许多bug 做兼容倒是搞了一阵 效果图 样式1 样式2 调用 正常情况下应该是后台生成的html代码,但还是写了一套操作tab页的方法 调用简便如下: <link rel="stylesheet" hr

亚马逊无货源打造爆款核心要素让你轻松赢得老外的心!

无数的亚马逊卖家都希望能够打造出爆款,让产品在官方首页上得以展示,但这不意味着能够得到更多的订单,赚取更多的利润,同时还有可能远超竞争对手,拥有进人壁垒,保护市场占有率上的优势.既然打造亚马逊爆款如此重要.那么需要卖家做些什么呢? 一.亚马逊对于卖家的要求亚马逊作为知名的国际性电商平台,目前不但对申请入驻的新卖家的审核标准越来越高,同时对已人驻的老卖家的考核指标越来越高.非常明显的一个趋势就是要卖家实现品牌化,要卖家精细化运营"小面美"的店铺,卖家要想在亚马逊上打造爆款就必须是迎合这种