一些关于Dapper的介绍:

1.Dapper是一个轻型的开源ORM类,代码就一个SqlMapper.cs文件,编译后就40多K的一个很小的Dll.

2.Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库

3.Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性。

4.Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能提升了很多;(比采用常规的反射)并且无须迁就数据库的设计。

Dapper源码下载链接:

点击这里下载dapper源代码。

 Demo:

           var connection = GetOpenConnection();var guid = Guid.NewGuid();string id = "6e2a106d-d838-48b9-ac74-ad604457bba2";//1泛型var dog = connection.Query<Dog>("select * from Dog where Id = @Id", new { Id = id });//2 动态解析var rows = connection.Query("select * from Dog where Id = @Id", new { Id = id }).ToList();foreach (dynamic item in rows){String 黑客 = item.Name;}

Query

            //3.执行不返回结果int result=connection.Execute("insert into Dog values(@age,@id,@name,@weight,@ignoredproperty)", new { age = 49, id = Guid.NewGuid(), name = "YZR", weight = 117.5, ignoredproperty = 1 });

Execute

            //4.批量ExecuteList<Dog> list = new List<Dog>();list.Add(new Dog() { Age = 9, Id = Guid.NewGuid(), Name = "ZXX", Weight = 120 });list.Add(new Dog() { Age = 9, Id = Guid.NewGuid(), Name = "WMJ", Weight = 120 });List<dynamic> paramsList = new List<dynamic>();foreach (Dog item in list){paramsList.Add(new { age = item.Age, id = item.Id, name = item.Name, weight = item.Weight, ignoredproperty = 1 });}int result = connection.Execute("insert into Dog values(@age,@id,@name,@weight,@ignoredproperty)", paramsList);

批量Execute

            //5.In操作dog = connection.Query<Dog>("select * from Dog where id in @ids", new { ids = new String[] { "6e2a106d-d838-48b9-ac74-ad604457bba3", "6e2a106d-d838-48b9-ac74-ad604457bba2", "535dab3a-d3c1-4cb0-b8f7-63351f491056" } });//等价于dog = connection.Query<Dog>("select * from Dog where id in (@id1,@id2,@id3)", new { id1 = "6e2a106d-d838-48b9-ac74-ad604457bba3", id2 = "6e2a106d-d838-48b9-ac74-ad604457bba2", id3 = "535dab3a-d3c1-4cb0-b8f7-63351f491056" });

In操作

            //数据库要建立主外键关系var sql =@"select p.*,u.* from Dog p left join Owner u on u.OwnerId = p.Id where p.id=@id Order by p.Id";Dog d = null;var t = connection.Query(sql, new { id = "6e2a106d-d838-48b9-ac74-ad604457bba2" });var data = connection.Query<Dog, Owner, Dog>(sql, (post, user) =>{if (d == null || d.Id != post.Id){d = post;}if (user != null){d.user.Add(user);}return post;}, new { id = "6e2a106d-d838-48b9-ac74-ad604457bba2" });

一对多关系

            //多查询的结果集sql =@"select * from Dog where Id = @idselect * from Owner";using (var multi = connection.QueryMultiple(sql, new { id = "6e2a106d-d838-48b9-ac74-ad604457bba3" })){var data = multi.Read<Dog>().ToList();var owner = multi.Read<Owner>().ToList();}

QueryMultiple

            //事务using (connection){//开始事务IDbTransaction transaction = connection.BeginTransaction();try{string query = "update Dog set Age=Age+1 where Id=@Id";string query2 = "update Dog set Weight=Weight+1.0 where Id=@Id";connection.Execute(query, new { Id = "71fff309-c7c9-4f64-b588-0a03e27459ba" }, transaction, null, null);connection.Execute(query2, new { Id = "71fff309-c7c9-4f64-b588-0a03e27459ba" }, transaction, null, null);//提交事务
                    transaction.Commit();}catch (Exception ex){//出现异常,事务Rollback
                    transaction.Rollback();throw new Exception(ex.Message);}}

IDbTransaction

            //存储过程var p = new DynamicParameters();//实例1//p.Add("@result", dbType: DbType.Int32, direction: ParameterDirection.Output);//var user = connection.Query("Test", p, commandType: CommandType.StoredProcedure);//int totalCount = p.Get<int>("@result");//实例2//注意点:调用如果使用query,那么存储过程需要有select结果集//p.Add("@result", dbType: DbType.Int32, direction: ParameterDirection.Output);//p.Add("@rowcount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);//var user = connection.Query("TestValue", p, commandType: CommandType.StoredProcedure);//int re = p.Get<int>("@result");//int ro = p.Get<int>("@rowcount");//实例3//存储过程分页需要row_number() over( order by id)这个排序的id需要指定p.Add("@PageIndex", 1, dbType: DbType.Int32, direction: ParameterDirection.Input);p.Add("@PageSize", 3, dbType: DbType.Int32, direction: ParameterDirection.Input);p.Add("@TableName", "Dog", dbType: DbType.String, direction: ParameterDirection.Input);p.Add("@Where", " 1=1 order by id asc ", dbType: DbType.String, direction: ParameterDirection.Input);//p.Add("@rowcount", dbType: DbType.Int32, direction: ParameterDirection.Output);p.Add("@rowcount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);var result = connection.Query("SelectBase", p, commandType: CommandType.StoredProcedure);int count = p.Get<int>("@rowcount");

Procedure

            //切换数据库connection.ChangeDatabase("数据库名称");

ChangeDatabase

Demo源代码下载

点击这里下载

 

转载于:https://www.cnblogs.com/Francis-YZR/p/5528299.html

Dapper-开源小型ORM相关推荐

  1. .Net开源SqlServer ORM框架SqlSugar整理

    一.链接整理 官方Git源代码地址: https://github.com/sunkaixuan/SqlSugar 最新发布版更新地址:当前版本Release 3.5.2.1 https://gith ...

  2. [开源] .Net ORM FreeSql 1.10.0 稳步向前

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...

  3. [开源] .Net ORM FreeSql 1.8.0-preview 最新动态播报

    FreeSql 是 .NET 开源生态下的 ORM 轮子,在一些人眼里属于重复造轮子:不看也罢.就像昨天有位朋友截图某培训直播发给我看,内容为:"FreeSQL(个人产品),自己玩可以,不要 ...

  4. [开源] .Net orm FreeSql 1.5.0 最新版本(番号:好久不见)

    废话开头 这篇文章是我有史以来编辑最长时间的,历时 4小时!!!原本我可以利用这 4小时编写一堆胶水代码,真心希望善良的您点个赞,谢谢了!! 很久很久没有写文章了,上一次还是在元旦发布 1.0 版本的 ...

  5. .Net开源微型ORM框架测评

    什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间 ...

  6. 开源XDesigner ORM 框架设计

    XDesigner ORM 框架设计 袁永福 2011-01-20 最新版本源代码下载地址 http://files.cnblogs.com/xdesigner/XDesignerORM.zip . ...

  7. thinkjdbc 关闭_ThinkJD: ThinkJD,又名ThinkJDBC,一个强大的开源JDBC/ORM操作库,让你尽可能简洁地用一行代码搞定数据库操作。...

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  8. 一个开源的ORM框架——Light.Data

    目录 介绍 支持的数据库 如何使用 数据库配置 使用方法 对象映射 子表映射 基本操作 数据聚合 Join表查询 执行SQL 单元测试 性能测试 介绍 Light.Data 是一个基于dotnet s ...

  9. K8S 微服务 —— misc

    融数数据基于Kubernetes的微服务治理和构建平台   DNS: A--IP地址 CName --主机名 PTR--与A相反 SRV--DNS SRV是DNS记录中一种,用来指定服务地址.与常见的 ...

最新文章

  1. springboot 跨域解决方案
  2. Linux 查看负载
  3. Android --- Session ‘app’: Error Launching activity解决办法
  4. BZOJ 1296 粉刷匠(分组背包套DP)
  5. 手握价值70万录用书的程序员提离职,领导:你已升职成功,还走?
  6. cmake linux编译,Ubuntu 16.04编译cmake源码
  7. 【TensorFlow-windows】keras接口——ImageDataGenerator裁剪
  8. Codeforces 258B Little Elephant and Elections
  9. 量产之后计算机读不出u盘,求大神、我量产没成功然后U盘就电脑上就不显示了...
  10. 项目管理基本目录结构
  11. Android 科大讯飞语音识别(详细步骤+源码)
  12. opencv 模式识别学习
  13. redis-狂神基础版
  14. HTML translate 属性
  15. 无人机航模电池上面有20C 30C,这是放电倍率
  16. mysql 部署master slave_MySQL Master Slave 数据同步,集群。
  17. Java线程同步-模拟买票
  18. BIOMOD2模型、MaxEnt模型物种分布模拟,生物多样性生境模拟,论文写作
  19. [Swift]UIButton文本添加下划线
  20. 电子变压器的设计工艺重不重要?

热门文章

  1. 【STM32】 keil软件介绍--工具栏
  2. Mysql半双工主从复制
  3. 为什么计算机的编码那么多,为什么中国剩余定理可用于计算机编码?
  4. php写文件 效率,php中读写文件与读写数据库的效率_PHP教程
  5. 牛客练习赛36 Rabbit的字符串(最小表示法)
  6. 成绩管理单链表文件c语言,c语言学生信息管理完整.docx
  7. VMware虚拟机NAT模式网络配置图文教程
  8. TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'的解决方法等
  9. linux系统命令make、clean、distclean的用法讲解
  10. python 变成float32_【Python】手把手教你用Python做一个图像融合demo,小白可上手!...