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

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

安装命令

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.配置数据库链接字符串

<connectionStrings>
    <add name="BaseConnectionString" connectionString="Data Source=.;Initial Catalog=dapperbase;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />
    <add name="MasterConnectionString" connectionString="Data Source=.;Initial Catalog=dapper;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />
  </connectionStrings>

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<Users>("select * from Users where UserName=@UserName", new { UserName = "chao" });

//无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
string query = "SELECT * FROM Users";
connection.Query<Users>(query).ToList();

//返回单条信息
string query = "SELECT * FROM Users WHERE id = @id";
book = connection.Query<Users>(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<Users>("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 = "王五" });
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值