Dapper学习笔记(一)

https://github.com/StackExchange/dapper-dot-net

Dapper是对IDbConnection的扩展,需要使用Dapper提供的扩展只需要把SqlMapper这个文件放到自己的项目中即可。这样项目中的IDbConnection就可以直接使用Dapper中的扩展方法,这是怎么实现的呢?百度才知道这个是C#提供的扩展方法。

扩展方法如何使用呢?直接看代码。

对Object写一个自定义的ToString()方法,输出"自定义Object的ToString()方法"

public static string ToString(this Object s,int a)
{
return "自定义Object的ToString()方法";
}

方法必须为静态方法,参数必须以this为前缀,然后接下来就是需要扩展的类。这里加上一个int a参数是假如因为自定义的扩展方法和原有的方法具有相同的名称和参数,那么永远不会调用自定义的扩展方法。

扩展方法还可以给自己新建的类进行扩展,比如这样使用

新建一个自定义类MyClass

public class MyClass
{

}

对MyClass增加扩展方法,输出类的全名

public static string ToMyClassName(this MyClass c)
{
    return c.GetType().FullName.ToString();
}

这样

MyClass my = new MyClass();
System.Console.WriteLine("我自定义的类" + my.ToMyClassName());

将会直接输出"我自定义的类Simple.Console.MyClass"

附上事例代码

using System;

namespace Simple.Console
{
    public class MyClass
    {

    }
    public static class Extension//必须先声明一个静态类,类名随意
    {
        public static string ToMyWord(this String str)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型为需要扩展的类型
        {
            return "这是我自定义的string扩展方法";
        }

        public static string ToCurentTime(this DateTime dt)
        {
            return DateTime.Now.ToLongDateString();
        }

        public static string ToMyClassName(this MyClass c)
        {
            return c.GetType().FullName.ToString();
        }

        public static string ToString(this Object s,int a)
        {
            return "自定义Object的ToString()方法";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass my = new MyClass();
            System.Console.WriteLine("我自定义的类" + my.ToMyClassName());
            System.Console.WriteLine("我自定义的String扩展方法" + "我们".ToMyWord());
            System.Console.WriteLine("我自定义的DateTime扩展方法" + new DateTime().ToCurentTime());
            System.Console.WriteLine("我自定义的重写ToString方法" + my.ToString(1));
            System.Console.ReadLine();
        }
    }
}

输出结果

最后看下SqlMapper.cs中的代码

1 /// <summary>
2         /// Execute parameterized SQL
3         /// </summary>
4         /// <returns>Number of rows affected</returns>
5         public static int Execute(this IDbConnection cnn, CommandDefinition command)
6         {
7             return ExecuteImpl(cnn, ref command);
8         }

这下就知道原来这个方式是对IDbConnection接口进行了扩展,然后在项目中使用的时候就可以直接使用这里写的扩展方法了。

时间: 2024-12-29 12:17:28

Dapper学习笔记(一)的相关文章

Dapper学习笔记(2)-链接引用

在研究Dapper源码时发现Dapper NET45类库中的SqlMapper.cs文件前面有个蓝色的箭头图标,发现在Dapper NET45文件夹下根本不存在SqlMapper.cs文件,其文件属性中的完整路径指向了Dapper NET40文件夹中的SqlMapper.cs文件,如下图: 后发现其为一个链接引用,代码文件只有一份,但是可以被多个项目所包含.在项目里面添加一个已存在的文件时选择“添加为链接”即可,具体操作如下:

Dapper 学习笔记

一.基础 1.Dapper代码就一个SqlMapper.cs文件, 前人测试Dapper速度较快 的Orm,读取速度接近IDataReader,超过DataTable. 2.a.下载地址 https://github.com/StackExchange/dapper-dot-net ,包含在线示例 (test project).b.net 下可以通过 Nuget下载. 3.实体类用NHibernateMappingGenerator生成. 二.示例代码 1.sql脚本 USE [FactoryD

Dapper学习笔记(4)-事务

Dapper中对事务的处理也非常简单,如下代码所示: 1 private void DapperTransaction() 2 { 3 using (IDbConnection con = OpenConnection()) 4 { 5 IDbTransaction tran = con.BeginTransaction(); 6 try 7 { 8 string query = "update T_Role set RoleName='开发主管' where RoleId=4";//

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件