轻量级ORM框架,Dapper基本使用方式

一:为什么选择Dapper

  1. Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll. 小型ORM
  2. Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。 速度快
  3. Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库 支持多数据库
   支持多数据库的本质是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,
SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口
  1. Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。 灵活性高
  2. Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高高。 性能高
  3. Dapper支持net2.0,3.0,3.5,4.0。【如果想在Net2.0下使用,可以去网上找一下Net2.0下如何配置运行Net3.5即可。】 支持多个.net版本
  4. Dapper语法十分简单。并且无须迁就数据库的设计。 语法简单,可扩展性强

Dapper官网:https://code.google.com/p/dapper-dot-net/

Dapper简单使用:http://www.cnblogs.com/wywnet/p/3422150.html


二:安装Dapper

1.通过nuget进行安装 或者 PM->Install-package Dapper

轻量级ORM框架,Dapper基本使用方式_第1张图片
2.在github上获取源码,把Dapper文件夹中的cs放到项目中就行,好像有很多的不能使用,具体不知道为啥,我是使用第一种nuget安装的

轻量级ORM框架,Dapper基本使用方式_第2张图片

注:
我在刚开始装的时候出现了一个问题 “Install-Package : 无法安装程序包“Dapper 1.50.5 ”您正在尝试将此程序包安装到某个将“.NETFramework,Version=v4.5”作为目标的项目中,但此程序包不包 含与该框架兼容的任何程序集引用或内容文件”,解决方式将NETFramework,换成4.5.1版本解决了这个问题。如果没有出现这问题,忽略。

******* 手动添加Dapper引用。
轻量级ORM框架,Dapper基本使用方式_第3张图片

三:代码实现CURD操作

1.在数据库中新建DapperTest表,DapperTest2 表和在项目中建对应的类
    public class DapperTest
    {
        public string ID { get; set; }
        public string UserName { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }

     //   public DapperTest2 imeinvoice { get; set; }
    }


    public class DapperTest2
    {
        public string ID { get; set; }
        public string NO { get; set; }
        public string METHOD { get; set; }

    }
2.CRUD开始
2.1 连接并打开数据库
 IDbConnection connection = new SqlConnection("Data Source=*******;Initial Catalog=***;
 User ID=sa;pwd=pasww;Connection Timeout=600;");
2.2 新建一条数据

轻量级ORM框架,Dapper基本使用方式_第4张图片

轻量级ORM框架,Dapper基本使用方式_第5张图片

    var result = connection.Execute("Insert into DapperTest values (@UserName, @Email, @Address)",
                           new { UserName = "jack", Email = "[email protected]", Address = "上海" });

2.2 新建多条数据,和一条新建的逻辑一样,传的参数是个集合而已
            var usersList = Enumerable.Range(0, 10).Select(i => new DapperTest()
            {
               Email = i + "qq.com",
              Address = "安徽",
              UserName = i + "jack"
            });

            //var result = connection.Execute("Insert into DapperTest 
            values (@UserName, @Email, @Address)", usersList);
2.3 Select查询操作
//2.3.1 无参数
 var query = connection.Query("SELECT TOP 100  *FROM  dbo.DapperTest ");
 
//2.3.2有参数
var query11 = connection.Query("SELECT TOP 100  *FROM  dbo.DapperTest
 where ID=@ID1", new { ID1 = 78 });

//2.3.3多条语句查询
            var sql = "select * from DapperTest; select  top  100 * from DapperTest2;update  DapperTest set 
             UserName=    @UserName  where ID=@ID";

            var multiReader = connection.QueryMultiple(sql, new { UserName = "1554444", ID = 10 });

            var productList = multiReader.Read();

            var userList = multiReader.Read();

            multiReader.Dispose();


//2.3.4  取一条
      var sql1 = @"  SELECT top 1  * FROM [dbo].[DapperTest] AS a LEFT JOIN  [dbo].[DapperTest2] 
      AS b  ON  b.ID=a.ID";
           var info1 = connection.QuerySingleOrDefault(sql1); //不加top1 ,如果有多条会报错


//2.3.5 取存储过程
 var info1111 = connection.Query("sp_GetUsers", 
                            commandType: CommandType.StoredProcedure);
2.4 一个类中包含另一个类,例:DapperTest类中有个 public DapperTest2 imeinvoice { get; set; }
 public class DapperTest
    {
        public string ID { get; set; }
        public string UserName { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }

       public DapperTest2 imeinvoice { get; set; }
    }


    public class DapperTest2
    {
        public string ID { get; set; }
        public string NO { get; set; }
        public string METHOD { get; set; }

    }


//包含关系查询

  var sql1 = @"  SELECT * FROM [dbo].[DapperTest] AS a LEFT JOIN  [dbo].[DapperTest2] AS b  ON  b.ID=a.ID";
       var info = connection.Query(sql1,
                                    (DapperTest, imeinvoice) =>
                                    {
                                        DapperTest.imeinvoice = imeinvoice; return DapperTest;
                                    });
2.5 Update操作
var query1 = connection.Execute("update  DapperTest set  UserName=@UserName
  where ID=@ID", new { UserName = "jac1111k", ID=10 });
2.6 Delete操作
var query1 = connection.Execute("delete  DapperTest where ID=@ID", new { ID=10 });

参考文档:1.https://www.cnblogs.com/qtqq/p/4280245.html (该文档含有封装类)
2.https://www.cnblogs.com/huangxincheng/p/5828470.html
3.https://www.cnblogs.com/huangxincheng/p/5832281.html
4.https://www.cnblogs.com/hy59005271/p/4759623.html

你可能感兴趣的:(ORM)