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 ...
随机推荐
- Java 监听器,国际化
1. 监听器 1.1 概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) Se ...
- easyui grid 里的可编辑text 加清空图标
$.extend($.fn.datagrid.defaults.editors, { text: { init: function (container, options) { var _opt = ...
- UNIX/Linux系统管理技术手册(2)----bash脚本编程
1. 一个简单的例子: $ vim readname.sh #file:readname.sh#!/bin/bash echo -n "Enter your name: " rea ...
- Excellent JD
Job description About the role We are looking for a talented engineer who has excellent cloud skills ...
- 02_NIO简单实例
[一个用NIO实现的客户端向服务端单向通信的例子] [服务端程序] package com.nio.test; import java.io.IOException; import java.net. ...
- 孙鑫VC++视频教程(1-20课全)
孙鑫VC++视频教程(1-20课全)PPT讲义和源代码 http://down.51cto.com/data/467760 孙鑫VC++从入门到精通开发详解视频教程[20讲] http://down. ...
- 【Web crawler】爬虫之百度首页
刚开始学习爬虫,照着教程手打了一遍,还是蛮有成就感的.使用版本:python2.7 *注意:python2的默认编码是ASCII编码而python3默认编码是utf-8 import urllib2 ...
- JavaScript中的appendChild()方法
appendChild()方法是向节点添加最后一个子节点.也可以使用此方法从一个元素向另一个元素移动元素. 案例一:向节点添加最后一个子节点 <!DOCTYPE html> <htm ...
- C++:关于委托类
转自:http://blog.csdn.net/dadalan/article/details/4041931.vs2010已经支持function/bind,能很好实现委托. [说明] 本文不仅介绍 ...
- 【Leetcode】【Medium】Linked List Cycle
Given a linked list, determine if it has a cycle in it. 解题: 判断单链表是否具有环,使用两个指针once和twice遍历链表,once一次走一 ...