作者:000000 | 来源:互联网 | 2023-09-13 23:16
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
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 = "王五" });