Dapper

Dapper的简介 

 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。 使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。这些ORM都可以轻松给你搞定。ORM给我们开发带来便利时,性能也是一个让我们不得不考虑的问题。一般的ORM性能和直接写原生的sql比都差不少,但是Dapper性能还很错,甚至和DbHelperSQL方式性能高出很多。

Dapper的优势

Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后体积小。
Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
Dapper支持多数据库。诸如:Mysql,SqlLite,Mssql系列,Oracle等一系列的数据库。
Dapper的R支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用,无XML无属性,代码以前怎么写现在还怎么写。
Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能高。
Dapper支持net2.0及以上版本
Dapper语法十分简单,并且无须迁就数据库的设计。
Dapper的性能
Dapper 的主要特点是性能。以下数据显示对一个数据库执行 SELECT 出 500 条,并把数据映射到对象中需要多长时间。

性能测试分为三个方面:

POCO 序列化框架,支持从数据库获得静态类型的对象。使用原始的 SQL。
动态序列化框架,支持返回对象的动态列表。
典型的框架用法。往往不会涉及编写 SQL。

 

 

查询:

using Dapper;
using System.Data;
using MySql.Data.MySqlClient;

using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = admin; Password = admin; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; ")) 
{
    var dt = new DataTable();
    IDataReader result = connection.ExecuteReader("select ID,  Name,  Age,  Address from person");
    dt.Load(result);
    Console.WriteLine("--------------------IDataReader----------------------");
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            Console.Write(dt.Columns[j].ColumnName + ":" + dt.Rows[i][dt.Columns[j].ColumnName].ToString() + " ");
        }
        Console.WriteLine();
    }
}
Console.WriteLine("--------------------Mapping----------------------");
using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = admin; Password = admin; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; "))
{
    var persons = await connection.QueryAsync<Person>("select ID,  Name,  Age,  Address from person");
    foreach (var item in persons)
    {
        Console.WriteLine(item);
    }
}

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
    public override string ToString()
    {
        return $"ID:{ID} Name:{Name} Age:{Age} Address:{Address}";
    }
}

OutPut:

 

 

修改:

 

using Dapper;
using System.Data;
using MySql.Data.MySqlClient;


using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = root; Password = root; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; "))
{
    var dt = new DataTable();
    connection.Open();
    using (IDbTransaction dbTransaction= connection.BeginTransaction())
    {
        int result = await connection.ExecuteAsync("update  person set Name='老大' where id=1 ", dbTransaction);
        dbTransaction.Commit();
        //dbTransaction.Rollback();
    } 
    IDataReader res = connection.ExecuteReader("select ID,  Name,  Age,  Address from person");
    dt.Load(res);
    Console.WriteLine("--------------------IDataReader----------------------");
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            Console.Write(dt.Columns[j].ColumnName + ":" + dt.Rows[i][dt.Columns[j].ColumnName].ToString() + " ");
        }
        Console.WriteLine();
    }
}

查看结果:

 

posted @ 2022-07-09 16:56  后跳  阅读(191)  评论(0编辑  收藏  举报