Dapper的使用总结

举报
王阿毛 发表于 2019/01/30 17:57:16 2019/01/30
【摘要】 趁这两天有时间总结下之前接触的一些技术。很早几个项目用国的ORM框架是IBatisNet,说实话这个玩意接触的不是特别深,第一感觉是不习惯,很麻烦。后来接触了Dapper发现真的是好用啊,可能也是一辈子面向数据库编程的命吧,好好。===============================================================首先介绍一下Dapper这款轻量级的O...

趁这两天有时间总结下之前接触的一些技术。

很早几个项目用国的ORM框架是IBatisNet,说实话这个玩意接触的不是特别深,第一感觉是不习惯,很麻烦。

后来接触了Dapper发现真的是好用啊,可能也是习惯了面向数据库编程吧。

===============================================================

首先介绍一下Dapper这款轻量级的ORM框架比较官方一些的东西。

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

有兴趣的童鞋可以自己搭梯子去外网看看。

关于dapper的一些优点:

1.Dapper的速度非常快,据了解查询速度能排在第二,不过这图也不知道是哪年的了,时效性不敢保证


image.png

2.Dapper用起来相当方便,语法十分简单。并且无须迁就数据库的设计。

3.Dapper支持多数据库,其本质据查是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,

SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口。

反正具体我也没有深究,从别的地方拷过来的。

4.Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。

5.Dapper支持net2.0,3.0,3.5,4.0。

=======================================================

接下来就是一些简单的Dapper使用方法了。

首先肯定是要引用Dapper,这个在NuGet上搜一下自动就安装好了。

image.png

安装完成以后我们假设数据库里有一张表叫User,里边存放着UserName,UserId,UserEmail三个字段。

建立一个类叫User

public class User
{
   public string UserName{ get; set; }
     public Int UserId{ get; set; }
     public string UserEmail{ get; set; }
}

  

获取User表里的数据

public List<User> GetUsers(){
using (IDbConnection conn = SqlDapper.GetConnection())
{
 List<User> entity = conn.Query<Pro_Tbm_Info>(strSql, new { Line_Id = lineId }).ToList();
}
return entity == null ? new List<User>() : entity;
}

好了,这就是一个简单的从数据库里读取数据的流程。

看起来比较简单,不过需要注意的是:User类的数据类型要和数据库里的数据类型保持一致

在读取或者插入的时候一定要注意数据类型是否对应,否则会有可能报错。

======================================================

在查询多条数据的时候则使用QueryMultiple方法,具体部分演示代码如下:

 using (IDbConnection conn = SqlDapper.GetConnection())
                {
                    var multiple = conn.QueryMultiple(strSql, new { search = "%" + search + "%" });
                    list = multiple.Read<Pro_Tbm_Info>().ToList();
                    //count = multiple.ReadSingle<int>();
                    var total = multiple.ReadSingle();
                    count = total.count;
                    var leijiGzl = total.LeijiGzl;
                    if (list.Count > 0)
                    {
                        list[0].LeijiGzl = leijiGzl;
                    }
                }

目前还没仔细研究

multiple.ReadSingle()

这个方法,下次有空再深入看看吧。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。