热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【.Net后端开发框架Dapper框架】Dappe轻量级ORM框架

Dappe轻量级ORM框架学习dapper介绍Dapper是.NET下一个micro的ORM,它和EntityFramework或Nhibnate不同,属于轻量级的,并且是半自动的
Dappe轻量级ORM框架学习

dapper介绍

Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的,可以实现数据到对象的ORM操作,体积小速度快(性能不错),使用ORM的好处是对数据的增、删、改查的速度很快,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。Dapper都可以轻松完成。

dapper的优势

1、Dapper是一个轻型的ORM类,编译后就40K的一个很小的Dll。
2、Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
3、Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库。
4、Dapper支持多表并联的对象。支持一对多 多对多的关系。
5、Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能很高。
6、Dapper支持net2.0,3.0,3.5,4.0。
7、Dapper语法十分简单。并且无须迁就数据库的设计。

dapper安装

程序包管理工具命令—安装命令

  • Install-Package 包名称
  • Install-Package Dapper

《【.Net后端开发框架-Dapper框架】-Dappe轻量级ORM框架》

dapper练习

1.创建数据表

创建Users用户表

CREATE TABLE [dbo].[Users]( [UserID] [int] IDENTITY(1,1) NOT NULL, [UserName] [varchar](50) NULL, [Email] [varchar](100) NULL, [Address] [varchar](100) NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [UserID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

2.配置数据库链接字符串


"BaseConnectionString" cOnnectionString="Data Source=.;Initial Catalog=dapperbase;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />
"MasterConnectionString" cOnnectionString="Data Source=.;Initial Catalog=dapper;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />

3. 操作数据库

3.1 创建实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DapperDemo.models
{
public class Users
{
public Int32 UserID { get; set; }
public String UserName { get; set; }
public String Email { get; set; }
public String Address { get; set; }
}
}

3.2 用dapper插入数据

  • 单条数据插入

//连接数据库
var cOnnection= DataConnectUtils.GetSdkMasterConnection();
//插入数据connection.Execute()执行sql插入语句
var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",new { UserName = "www", Email = "123456@qq.com", Address = "上海" });

  • 多条数据的插入

//连接数据库
var cOnnection= DataConnectUtils.GetSdkMasterConnection();
// 插入的Users对象列表
var usersList = Enumerable.Range(0, 10).Select(i => new Users()
{
Email = i + "qq.com",
Address = "贵阳",
UserName = i + "chao"
});
//返回插入数据条数。
var results = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", usersList);

3.3 用dapper查询数据

//2. Query操作,返回一个Users对象
var query = connection.Query("select * from Users where UserName=@UserName", new { UserName = "chao" });
//无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
string query = "SELECT * FROM Users";
connection.Query(query).ToList();
//返回单条信息
string query = "SELECT * FROM Users WHERE id = @id";
book = connection.Query(query, new { id = id }).SingleOrDefault();

3.4 用dapper更新数据

//3.update操作,还是使用Execute方法来实现,和insert操作一样。
var _update = connection.Execute("update Users set UserName='王超' where UserName=@UserName", new { UserName = "jack" });

3.5 用dapper删除数据

//4.采用参数化的形式来删除用户记录
var delete = connection.Execute("delete from Users where UserName=@UserName", new { UserName = "chao" });

3.6 用dapper事务操作

var cOnn=DataConnectUtils.GetSdkMasterConnection()
using (conn)
{
//开始事务
IDbTransaction transaction = conn.BeginTransaction();
  try
  {
    string query = "DELETE FROM Users WHERE id = @id";
    conn.Execute(query, new { Id = id }, transaction, null, null);
    //提交事务
    transaction.Commit();
  }
  catch (Exception ex)
  {
    //出现异常,事务Rollback
    transaction.Rollback();
    throw new Exception(ex.Message);
  }
}

数据库操作代码

public static void Main(string[] args)
{
//数据库链接
var cOnnection= DataConnectUtils.GetSdkMasterConnection();
//1. Insert操作(有两种insert操作—单条insert操作;批量InsertBulk操作)
// Insert插入数据;返回插入数据条数
var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",
new { UserName = "www", Email = "123456@qq.com", Address = "上海" });
//InsertBulk操作; Select将序列中的每个元素投影到新表中。
//将上面这个 ”匿名对象" 变成 ”匿名对象集合。
var usersList = Enumerable.Range(0, 10).Select(i => new Users()
{
Email = i + "qq.com",
Address = "贵阳",
UserName = i + "jack"
});
//返回插入数据条数
var results = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", usersList);
//2. Query操作,返回一个Users对象-Enumerable列表
var query = connection.Query("select * from Users where UserName=@UserName", new { UserName = "jack" });
//3.update操作;这种操作方式,我们还是使用Execute方法来实现,和insert是一种套路的哦。返回修改的记录条数
var _update = connection.Execute("update Users set UserName='王超' where UserName=@UserName", new { UserName = "jack" });
//dapper查询亮点:就在于能够自动化将查询数据mapper到我们object(users)上面来,这是我们DataReader所不能办到的~~~
//4.这里我还是采用参数化的形式来删除UserID=10这条记录
var _delete = connection.Execute("delete from Users where UserName=@UserName", new { UserName = "王五" });

推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
author-avatar
000000
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有