c#随便聊聊数据库操作
最近在学习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#随便聊聊数据库操作的更多相关文章
- android中的数据库操作(转)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- 聊聊数据库~3.SQL基础篇
上篇回顾:聊聊数据库~SQL环境篇 扩展:为用户添加新数据库的权限 PS:先使用root创建数据库,然后再授权grant all privileges on 数据库.* to 用户名@"%& ...
- 聊聊数据库~2.SQL环境篇
传统数据库 上篇文章:聊聊数据库~开篇 https://www.cnblogs.com/dotnetcrazy/p/9690466.html 本来准备直接开讲NoSQL的(当时开篇就是说的NoSQL) ...
- C# SQLite 数据库操作
C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...
- 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 ...
- android中的数据库操作(SQLite)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- C# .NET数据库操作
C# .NET更智能的数据库操作的封装完整版(重构) 前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天 ...
- Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?
Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的? 如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
随机推荐
- var a =10 与 a = 10的区别
学习文章------汤姆大叔-变量对象 总结笔记 变量特点: ①变量声明可以存储在变量对象中.②变量不能直接用delete删除. var a =10 与 a = 10的区别: ①a = 10只是为全局 ...
- Visual Studio扩展与更新中插件被禁用,安装后无法使用
在Visual Studio中的扩展与更新中安装插件后,显示[禁用],重新安装后仍然不能使用,但是VS默认安装的扩展却可以正常使用. 这里需要注意下方显示“当前不允许加载每用户扩展”,点击“启用每用户 ...
- RMAN备份等级详解
(2011-06-27 11:38:28) 转载▼ 标签: 杂谈 分类: oracle 在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块, ...
- UIButton的titleLabel
UIButton的titleLabel @property(nonatomic, readonly, retain) UILabel *titleLabel Description - 描述A vie ...
- vagrant 安装虚拟机
目录 搭建属于你的环境 安装virtualbox 安装 vagrant vagrant 添加系统镜像box 新建虚拟机 相关配置 ==遇到问题== [TOC] 搭建属于你的环境 安装环境有时也是头疼的 ...
- yii2框架安装运行init.bat报错php.exe不是内部或外部命令
在安装yii2框架的时候,遇到一个很纠结的问题.就是当我把安装包下载下来之后,在公司的电脑安装可以正常,当我回家用自己的电脑安装就报错,提示 php.exe 不是内部或外部命令,也不是可运行的程序.这 ...
- 在IDE中集成boost
1. 获得Boost 进入Boost的网站(http://www.boost.org/) 下载boost_1_62_0.zip 2. 解压Boost 解压 boost_1_62_0.zip ,比如解压 ...
- July 13th 2017 Week 28th Thursday
No dream is too big, and no dreamer is too small. 梦想再大也不嫌大,追梦的人再小也不嫌小. Hold on to your dreams, but b ...
- (原)使用 memcache 使用过程中可能遇到的问题
在项目优化中,使用到了memcache,刚开始不能用,后来期间总会偶尔抛出异常,刚开始怀疑动态库版本问题,后来尝试了各种替换依旧误解,搞得我日思夜想的,天天惦记着他..=_= 下午拿出半天时间,进行错 ...
- WiFi安全测试工具WiFiPhisher
官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底wifiphisher-master.zip=================== ...