最近在学习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参数委托要好与泛型,在运行过程是需要监测类型的)>表达式(表达式树)>反射。

c#随便聊聊数据库操作的更多相关文章

  1. android中的数据库操作(转)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  2. 聊聊数据库~3.SQL基础篇

    上篇回顾:聊聊数据库~SQL环境篇 扩展:为用户添加新数据库的权限 PS:先使用root创建数据库,然后再授权grant all privileges on 数据库.* to 用户名@"%& ...

  3. 聊聊数据库~2.SQL环境篇

    传统数据库 上篇文章:聊聊数据库~开篇 https://www.cnblogs.com/dotnetcrazy/p/9690466.html 本来准备直接开讲NoSQL的(当时开篇就是说的NoSQL) ...

  4. C# SQLite 数据库操作

    C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...

  5. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  6. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  7. C# .NET数据库操作

    C# .NET更智能的数据库操作的封装完整版(重构)   前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天 ...

  8. Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?

    Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的?   如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一 ...

  9. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

随机推荐

  1. vs生成的exe程序和相关dll打包

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782897   打包工具:Inno Setup 编译器  源文件 :vs生成的.exe和 ...

  2. nginx 两台机器 出现退款失败问题

    今天早上来公司后,测试人员告诉我 退款失败了.上周五还好好的,怎么这周三就出问题了,赶快让测试发来订单号,查询数据库,查询日志,发现还是以前的问题: search hit TOP, continuin ...

  3. Linux ->> UBuntu 14.04 LTE下安装Hadoop 1.2.1(集群分布式模式)

    安装步骤: 1) JDK -- Hadoop是用Java写的,不安装Java虚拟机怎么运行Hadoop的程序: 2)创建专门用于运行和执行hadoop任务(比如map和reduce任务)的linux用 ...

  4. 使用MapKit框架(持续更新)

    使用MapKit框架 地图显示 最简单显示地图的代码: // // RootViewController.m // CoreLocation // // Copyright (c) 2014年 Y.X ...

  5. jbd2/dm-2-8 io太高

    用iotop查看发现[jbd2/dm-2-8]几乎占用了99%的io使用率,但是却没有输入输出 后来上网查找,网上有人说是个内核bug,需要升级内核,或者降低jdb2的提交次数,即重新挂载磁盘 添加c ...

  6. dll的制作

    https://blog.csdn.net/guanchanghui/article/details/1621031

  7. Code First TPH、TPT、TPC与继承类

    一.Table Per Hierarchy (TPH,默认) 每个层次结构共用一个表,类的每一个属性都必须是可空的. 1.默认行为 只建立一个表,把基类和子类中的所有属性都映射为表中的列. 在这种处理 ...

  8. canvas的两个方法说明

    今天在用canvas的时候,发现有两个方法比较陌生,在此记录详细说明一下. (1)文本绘制的一个方法 canvas.drawTextOnPath(text, path, hOffset, vOffse ...

  9. Executor线程池框架

    Executor线程池框架 new Thread()的缺点 每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致 ...

  10. Django logging的介绍

    Django用的是Python buildin的logging模块. Python logging由四部分组成: Loggers - 记录器 Handles - 处理器 Filters - 过滤器 F ...