Dapper扩展Dapper.Common框架 Linq To Sql 底层源码.net ORM框架
源代码:https://github.com/1448376744/Dapper.CommonNUGET: Dapper.CommonQQ群:642555086
一、基本结构,此处可用委托,或动态代理完成
class Program
{
//类加载时配置一次
static Program()
{
//配置数据源为mysql
SessionFactory.DataSource = ()=>new MySqlConnection("server=127.0.0.1;user id=root;password=1024;database=test;");
//下划线不敏感,默认不区分大小写
SessionFactory.MatchNamesWithUnderscores = true;
//Session使用静态代理,记录会话日志,生产模式设置false
SessionFactory.SessionProxy = true;
}
static void Main(string[] args)
{
//变量声明
ISession session = null;
try
{
//开启一次数据会话
session = SessionFactory.GetSession();
//开启事物,取消自动提交
session.Open(false);
//事物操作1
//事物操作2
//事物操作3
//.......
//提交事物
session.Commit();
}
catch (Exception e)
{
//异常回滚
if (session!=null)
{
session.Rollback();
}
throw e;
}
finally
{
//资源释放
if (session!=null)
{
session.Close();
}
}
}
}
二、映射,此处可用自动模板完成
/// <summary>
/// 对应表student,同名可以省略,字段名不分大小写,不分下划线
/// </summary>
[Table("student")]
public class Student
{
/// <summary>
/// 对应字段ID,主键标识列identity=true
/// </summary>
[Column("ID", true)]
public int? Id { get; set; }
/// <summary>
/// 对应字段ME_NAME,通过Column校正为Name,
/// </summary>
[Column("ME_NAME", false)]
public string MeName { get; set; }
/// <summary>
/// 对应数据字段AGE无需校正
/// </summary>
public int? Age { get; set; }
/// <summary>
/// 对应字段CREATE_TIME,不分大小写,下划线不敏感
/// </summary>
[Column("CREATE_TIME", false)]
public DateTime? CreateTime { get; set; }
}
三、常用API
var sesion = SessionFactory.GetSession();
/*****************INSERT*******************/
//Dapper
var row1 = sesion.Execute("insert into student(Age,ME_NAME)values(@Age,@MeName)", new { Age = 20, MeName = "Dapper" });
//扩展
var row2 = sesion.From<Student>().Insert(new Student()
{
Name = "Dapper.Common",
Age = 50,
CreateTime = DateTime.Now
});
var identity = sesion.From<Student>().InsertById(new Student()
{
Age = 20,
Name = "Identity"
});
//list
var list = new List<Student>();
list.Add(new Student()
{
Name = "Dapper.Common",
Age = 50,
CreateTime = DateTime.Now
});
var row3 = sesion.From<Student>().Insert(list);
/*****************UPDATE*******************/
//根据主键修改全部列
var row4 = sesion.From<Student>().Update(new Student()
{
Id = 27,
Name = "Update"
});
//list
var list2 = new List<Student>();
list2.Add(new Student()
{
Name = "Update List",
Id = 27
});
list2.Add(new Student()
{
Name = "Update List",
Id = 28
});
var row5 = sesion.From<Student>().Update(list2);
//修改部分列+条件更新
var entity = new
{
Age = 20,
Name = "admin"
};
var row6 = sesion.From<Student>()
//如果第一个条件为true,则更新MeName为entity.Name
.Set(!string.IsNullOrEmpty(entity.Name), a => a.Name, entity.Name)
//Age在原来的基础上加20
.Set(a => a.Age.Eq(a.Age + entity.Age))
//条件ID=30
.Where(a => a.Id == 30)
//要执行的操作
.Update();
/*****************DELETE*******************/
//更据实体ID删除
var row7 = sesion.From<Student>().Delete(new Student() { Id = 30 });
//条件删除
var row8 = sesion.From<Student>()
.Where(a => a.Age > 20)
.Delete();
/*****************Select*******************/
//查询单个
var student = sesion.From<Student>().Single();
var list1 = sesion.From<Student>().Select();
//复杂查询
list = sesion.From<Student>()
//查询条件
.Where(a => a.Age > 20 && a.Id.In(new int[] { 1, 2, 3 }.ToList()))
//排序
.Desc(a => a.Id)
//悲观锁
.XLock()
//分页
.Limit(1, 10)
//部分列
.Select(s => new { s.Name });
//分页查询,返回总记录数
var total = 10;
list = sesion.From<Student>()
.Skip(1, 5, out total)
.Select();
/*****************动态查询*******************/
var query = new WhereQuery<Student>();
query
.And(a => a.Name.Like("%aa%"))
.Or(a => a.Id > 0)
.Or(a => a.Id < 10)
.Or(a => a.Id.In(new[] { 1, 2, 3 }))
.And(a => 1 > 2 ? a.Name.Like("cc%") : a.Id > 100);
var res = sesion.From<Student>().Where(query).Exists();
/*****************会话日志*******************/
var aa = sesion.Logger();
Dapper扩展Dapper.Common框架 Linq To Sql 底层源码.net ORM框架的更多相关文章
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- Spring5源码解析-Spring框架中的单例和原型bean
Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...
- Ext.NET 4.1 系统框架的搭建(后台) 附源码
Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5 VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- JDK源码及其他框架源码解析随笔地址导航
置顶一篇文章,主要是整理一下写过的JDK中各个类的源码及其他框架源码解析的文章,方便自己随时阅读也方便网友朋友们阅读与指正 基础篇 从为什么String=String谈到StringBuilder和S ...
- Flask框架(五) —— session源码分析
Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- SQLmap源码分析之框架初始化(一)
SQLmap是现在搞web人手一个的注入神器,不仅包含了主流数据库的SQL注入检测,而且包含提权以及后渗透模块.基于python2.x开发而成,使用方便.所以研究web安全少不了分析源码,学习代码的同 ...
随机推荐
- 关于微软的.NET版本系列
.net的不同版本的区分,感觉十分坑,搞开发的不能还去研究他们的版本含义或差异吧!下面为整理的一些相关内容: 一..NET的那些版本 .net framework 版本是可以向后兼容的,安装高版本的可 ...
- 「小程序JAVA实战」小程序导航组件(26)
转自:https://idig8.com/2018/08/19/xiaochengxujavashizhanxiaochengxudaohangzujian26/ 来说下 ,小程序的导航组件.源码:h ...
- 「小程序JAVA实战」小程序视图之细说wx:key列表高级特性(16)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-16/ wx:key的高级特性.这个很重要,因为在app上经常有上拉,下拉加载,我们如果不使用这个特 ...
- @RestController使用 接收jso参数 将参数转换为对象
package com.monitor.controller; import org.springframework.http.ResponseEntity; import org.springfra ...
- 06002001单例模式C#实现版本
书名:设计模式之禅 作者:秦小波 出版社:机械工业出版社 1 描述 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2 UML类图 图1-1 单例模式类图 3 代码 Singleto ...
- Python实现阿里云短信推送
本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- Perl 变量:标量变量
Perl 标量标量是一个简单的数据单元.标量可以是一个整数,浮点数,字符,字符串,段落或者一个完整的网页. 1.数字标量标量通常是一个数字或字符串. 2.字符串标量以下实例演示了不同类型的字符串标量的 ...
- 【hdu4135】【hdu2841】【hdu1695】一类通过容斥定理求区间互质的方法
[HDU4135]Co-prime 题意 给出三个整数N,A,B.问在区间[A,B]内,与N互质的数的个数.其中N<=10^9,A,B<=10^15. 分析 容斥定理的模板题.可以通过容斥 ...
- Unity 之 Shader 面的剔除 Cull
面的剔除 Cull 在渲染的时候,默认情况下是只有朝向摄像机的面才会被渲染,可以告诉Unity,我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候会用到对Cull的操作来计算和物体相交的投影 ...