最近在学习web后台以及Python,到了程序员的转折年纪了,哎。估计很久不会写博文了。言归正传。

在原理的数据库连接池HiKari项目上。我扩展了独立的3个库,说是3个库,其实原本该是一个库。先聊聊这个库,库完全独立,只是因为是数据库操作,所以放在一起了,其实现在完全没有关联。这几个库的作用就是我们常用的功能,实体转换。将DataTable,DataReader转换成实体。基本类库采用的是反射,表达式树进行转换。另外2个库是分别补充.net core库和.net framework库使用emit技术进行转换。由于现在标准库还没有支持emit很多方法,但是net core库和.net framework库已经有了,所以分别增加了,预计下一版本标准库会支持,到时升级,然后去除另外2个库,将emit转换代码移植到标准库,就只有一个库了。

不知道大家平时使用ORM框架否,我是没有用过的。但是上面这个实体转换就是ORM的核心了。至于其它,就是使用风格了。不管你是说明ORM,最后都是转成SQL语句执行,唯独多一个转换实体。

想想ORM在干嘛?说简单点就是将一把常用的SQL语句,用API的方式封装出来,让你用调用函数的方式使用,如果业务上是单表,那就剩了很多麻烦。其实想想,从你的UI开始传入参数,不就是一个ORM的类似过程。但是业务各不相同,没有完全统一的方式。大概就是讲对象转换成SQL,整个高大尚的词linq to sql ,类似功能。最简单的封装,SQL语句,Model参数解析,Dapper 轻量框架。

开始,我打算封装一个,但是后来觉得没有必要了,既然有这么多了,自己浪费时间干嘛,使用久经考验的岂不是很好,浪费时间。要使用框架,现成开源的有,要自己造轮子,满足自己的项目,就自己把类库封装起来,也许就一个接口和类就能解决问题。

将SQL参数与model转换一下就好。没有必要重复造轮子。所以我选择提供使用的工具类,适当的封装但是不失去灵活。其余自己用一个类实现就好,无法就是反射属性值,用名称匹配参数,可以字符串替换,可以正则表达式。总之就看自己怎么拼接SQL。所以我只提供基本的东西,自己需要就自己简单封装。ORM一般是牺牲了性能的。如果你了解过很多,对外其实都是一样的,总体就是查询方法,执行接口方法。如果提供json字符串返回,哈哈哈,把List<T>选择一个高性能的库序列化json不就完了吗。看看,就是组合封装而已,再加一层,或者一行代码而已。

也许后面会简单写个样例在项目中,谁知道呢,毕竟个人生活也需要时间。我提供的封装,是一层层起来,不会影响底层一级的使用。所以找到适合自己的封装一层即可。

提供的类任然在HiKari项目中,已经提交GitHub。

这里提到了几种转换方式,其实就是几种实现反射方式,不同机器配置是不一样的,简单给大家一个执行速度的比较

直接调用>=Emit>委托(一般object参数委托要好与泛型,在运行过程是需要监测类型的)>表达式(表达式树)>反射。

最新文章

  1. minigui交叉编译整理
  2. 主机与虚拟机通信:以主机VS2010连接虚拟机MySql为例
  3. 编写高质量代码改善C#程序的157个建议[协变和逆变]
  4. Greedy:Packets(POJ 1017)
  5. Winform 窗口拖动
  6. java运算符优先级记忆口诀
  7. [MySQL5.6] 一个简单的optimizer_trace示例
  8. 【转】Eclipse使用git最简易流程
  9. okHttp封装使用
  10. HMC5883L地磁传感器驱动
  11. HttpWebRequest操作已超时
  12. c# 上传图片到一个外链相册服务器
  13. 光圈,快门, 曝光,焦距, ISO,景深。
  14. HTL里面使用sling model的时候传参问题
  15. 修复windows通过局域网文件共享访问失败的问题
  16. mongodb 创建更新语法
  17. 单表40G,不要吃惊,还能往里面插入数据,哈哈
  18. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase] 错误
  19. PCA in MLLib
  20. 040 DataFrame中的write与read编程

热门文章

  1. Cookie实现留言板
  2. 操作Hadoop集群
  3. 参数化查询为什么能够防止SQL注入 (转)
  4. Jmeter CSV 参数化/检查点/断言
  5. Linux -&gt;&gt; UBuntu 14.04 LTE下安装Hadoop 1.2.1(集群分布式模式)
  6. Sql Server中利用ISNULL方法判断数字并预设值
  7. ssh_exchange_identification: Connection closed by remote host
  8. Error: A JNI error has occurred, please check your installation and try again
  9. 如何使用Flashfxp上传下载文件
  10. linux 配置 tftp