源代码: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框架的更多相关文章

  1. MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

    前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...

  2. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  3. Spring5源码解析-Spring框架中的单例和原型bean

    Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...

  4. Ext.NET 4.1 系统框架的搭建(后台) 附源码

    Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5  VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...

  5. Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析

    经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...

  6. JDK源码及其他框架源码解析随笔地址导航

    置顶一篇文章,主要是整理一下写过的JDK中各个类的源码及其他框架源码解析的文章,方便自己随时阅读也方便网友朋友们阅读与指正 基础篇 从为什么String=String谈到StringBuilder和S ...

  7. Flask框架(五) —— session源码分析

    Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...

  8. SQL学习笔记八之ORM框架SQLAlchemy

    阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...

  9. SQLmap源码分析之框架初始化(一)

    SQLmap是现在搞web人手一个的注入神器,不仅包含了主流数据库的SQL注入检测,而且包含提权以及后渗透模块.基于python2.x开发而成,使用方便.所以研究web安全少不了分析源码,学习代码的同 ...

随机推荐

  1. select sum也会返回null值

    SELECT  SUM(detail.VAL)  FROM   AI_SDP_ORDER_MONTH_DETAIL_201706    detail 如果所有的VAL都是null的话,或者根本就不存在 ...

  2. python打开浏览器的三种方法

    1.startfile方法 import os os.startfile("C:\Program Files (x86)\Google\Chrome\Application\chrome.e ...

  3. Bootstrip 的select的数据绑定问题

    这个问题浪费了我整整一个下午时间 最后终于解决了  这里来备份一下 $(function(){ var stu_no = freeUrl(); var data, subname="&quo ...

  4. C6 P5.2

    引用自 http://snippetinfo.net/media/117 下载源:php-5.2-x64.zip wget 源包.zip yum -y install httpd libXpm.so. ...

  5. centos7 修改静态ip 和dns

    1.修改对应网卡的IP地址的配置文件# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-et ...

  6. 数组和集合(三):Set集合的使用总结

    一.概述 · 继承collection接口 · 无序(不记录添加顺序).不允许元素重复.只允许存在一个null元素 二.实现类 1. HashSet · 底层其实是包装了一个HashMap实现的 · ...

  7. Bresenham画线算法

    [Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:<计算机图形 ...

  8. Opencv HOG特征检测

    HOGDescriptor hogDescriptor = HOGDescriptor(); hogDescriptor.setSVMDetector(hogDescriptor.getDefault ...

  9. ssh的发展历程与基本原理

    一.ssh是什么 SSH(Secure Shell)是一个提供数据通信安全.远程登录.远程指令执行等功能的安全网络协议,最初提出目的是替代非安全的Telnet.rsh.rexec等远程Shell协议. ...

  10. Mule ESB 安装基本配置要求

    Hardware Requirements* 2GHz, dual-core CPU, or 2 virtual CPUs in virtualized environments 2GB of RAM ...