NetCore+Dapper WebApi架构搭建(二):底层封装
看下我们上一节搭建的架构,现在开始从事底层的封装
1、首先需要一个实体的接口IEntity
namespace Dinner.Dapper
{
public interface IEntity<TPrimaryKey>
{
TPrimaryKey Id { get; set; }
}
}
2、由于所有的数据库实体都是有主键的,所以这里定义一个BaseModel,这里我用的主键是Guid,你们可以换成int
using System; namespace Dinner.Dapper
{
public class BaseModel : IEntity<Guid>
{
public Guid Id { get; set; }
}
}
3、接下来是封装Dapper的SqlServer配置DataBaseConfig(Redis的配置你们可以忽略),不要忘记添加Dapper的Nuget包
using StackExchange.Redis;
using System.Data;
using System.Data.SqlClient; namespace Dinner.Dapper
{
public class DataBaseConfig
{
#region SqlServer链接配置 private static string DefaultSqlConnectionString = @"Data Source=localhost;Initial Catalog=Dinner;User ID=sa;Password=123456;";
private static string DefaultRedisString = "localhost, abortConnect=false";
private static ConnectionMultiplexer redis; public static IDbConnection GetSqlConnection(string sqlConnectionString = null)
{
if (string.IsNullOrWhiteSpace(sqlConnectionString))
{
sqlConnectionString = DefaultSqlConnectionString;
}
IDbConnection conn = new SqlConnection(sqlConnectionString);
conn.Open();
return conn;
} #endregion #region Redis链接配置 private static ConnectionMultiplexer GetRedis(string redisString = null)
{
if (string.IsNullOrWhiteSpace(redisString))
{
redisString = DefaultRedisString;
}
if (redis == null || redis.IsConnected)
{
redis = ConnectionMultiplexer.Connect(redisString);
}
return redis;
} #endregion
}
}
4、然后是仓储基接口IRepositoryBase,添加了基本的增删改查和一个无参的存储过程
using System;
using System.Collections.Generic;
using System.Threading.Tasks; namespace Dinner.Dapper
{
public interface IRepositoryBase<T>
{
Task Insert(T entity, string insertSql); Task Update(T entity, string updateSql); Task Delete(Guid Id, string deleteSql); Task<List<T>> Select(string selectSql); Task<T> Detail(Guid Id, string detailSql); /// <summary>
/// 无参存储过程
/// </summary>
/// <param name="SPName"></param>
/// <param name="args"></param>
/// <returns></returns>
Task<List<T>> ExecQuerySP(string SPName);
}
}
5、仓储基实现类RepositoryBase继承仓储基接口,简单实现增删改查和无参的存储过程
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks; namespace Dinner.Dapper
{
public class RepositoryBase<T> : IRepositoryBase<T>
{
public async Task Delete(Guid Id, string deleteSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(deleteSql, new { Id = Id });
}
} public async Task<T> Detail(Guid Id, string detailSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
//string querySql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users WHERE Id=@Id";
return await conn.QueryFirstOrDefaultAsync<T>(detailSql, new { Id = Id });
}
} /// <summary>
/// 无参存储过程
/// </summary>
/// <param name="SPName"></param>
/// <returns></returns>
public async Task<List<T>> ExecQuerySP(string SPName)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
return await Task.Run(() => conn.Query<T>(SPName, null, null, true, null, CommandType.StoredProcedure).ToList());
}
} public async Task Insert(T entity, string insertSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(insertSql, entity);
}
} public async Task<List<T>> Select(string selectSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
//string selectSql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users";
return await Task.Run(()=>conn.Query<T>(selectSql).ToList());
}
} public async Task Update(T entity, string updateSql)
{
using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
{
await conn.ExecuteAsync(updateSql, entity);
}
}
}
}
上面这些就是底层基本的封装,下一节我们来添加实体和仓储
源码地址: https://github.com/wangyulong0505/Dinner
NetCore+Dapper WebApi架构搭建(二):底层封装的更多相关文章
- NetCore+Dapper WebApi架构搭建(一):基本框架
初衷是想用dapper搭建一个高性能的架构,因为dapper操作数据库的效率很高 1.VS创建一个NetCore WebApi的框架,然后解决方案添加一个NetStandard的类库 整个解决方案如图 ...
- NetCore+Dapper WebApi架构搭建(四):仓储的依赖注入
上一节我们讲到实体,仓储接口和仓储接口的实现需要遵循约定的命名规范,不仅是规范,而且为了依赖注入,现在我们实现仓储的依赖注入 在NetCore WebApi项目中新添加一个文件夹(Unit),当然你也 ...
- NetCore+Dapper WebApi架构搭建(三):添加实体和仓储
上一节讲了类库添加一些底层的基本封装,下面来添加实体和仓储 1.Entities文件夹添加一个实体类Users,继承BaseModel,即拥有BaseModel的主键 using System; na ...
- NetCore+Dapper WebApi架构搭建(六):添加JWT认证
WebApi必须保证安全,现在来添加JWT认证 1.打开appsettings.json添加JWT认证的配置信息 2.在项目根目录下新建一个Models文件夹,添加一个JwtSettings.cs的实 ...
- NetCore+Dapper WebApi架构搭建(五):Swagger构建WebApi界面
上一节讲解了仓储的依赖注入,想必现在都可以通过构造函数依赖注入直接调用 但是WebApi只是提供一个接口调用,为了方便我们的操作,我们得给他加上一个图形化界面工具,使用Swagger WebApi项目 ...
- 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步
深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...
- .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- NetCore Dapper封装
一.前期环境准备 1.创建一个core webapi的项目,基于core3.1版本创建一个项目. 2.Dapper安装,使用NuGet来安装Dapper程序包 Install-Package Dapp ...
- Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装. Dapper的用法比较接近ADO.NET所以性能也是比较快.所以我们先来看看使用A ...
随机推荐
- 【Linux】SecureCRT连接Linux乱码
SecureCRT连接linux出现乱码问题.解决方法. 打开SecureCRT-->option-->Session option
- centos6安装elasticsearch6.0
环境准备 1台centos6操作系统主机,关闭selinux及iptables官方下载elasticsearch6.0软件包:https://artifacts.elastic.co/...官方下载j ...
- 20155207 2016-2017-2 《Java程序设计》第七周学习总结
20155207 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GM ...
- 【leetcode 简单】 第一百零八题 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不 ...
- UNIX网络编程 第6章 I/O复用:select和poll函数
UNIX网络编程 第6章 I/O复用:select和poll函数
- boost::bind的使用
最近在几经波折之后,终于对于boost::bind有点理解了.对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法.其实这得益于c++的模板以及操作 ...
- STL容器基本功能与分类
STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list ...
- shell系统检测->
系统状态检测脚本练习 1-> 查看磁盘状态 思路:查看磁盘/当前使用状态,如果使用率超过80%则报警发邮件 1.获取磁盘当前使用的值 df -h|grep /$ 2.从获取到的值中提取出,对应的 ...
- 在jsp页面中设置了远程验证,在初始化时必须预先调用一次。
参考链接:http://code.taobao.org/p/sztaotao/diff/5/trunk/code/src/main/webapp/webpage/modules/sys/roleFor ...
- 三、springboot热部署
1.spring-boot-devtools 实现热部署 spring-boot-devtools 最重要的功能就是热部署.它会监听 classpath 下的文件变动,并且会立即重启应用. <d ...