ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dapper

2022-07-09 17:04:53  阅读:128  来源: 互联网

标签:Console ID connection using Dapper dt


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();
    }
}

查看结果:

 

标签:Console,ID,connection,using,Dapper,dt
来源: https://www.cnblogs.com/Zingu/p/16461329.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有