NetCore+Dapper WebApi架构搭建(二):底层封装

看下我们上一节搭建的架构,现在开始从事底层的封装

1、首先需要一个实体的接口IEntity

11 namespace Dinner.Dapper 22 { 33 public interface IEntity<TPrimaryKey> 44 { 55 TPrimaryKey Id { get; set; } 66 } 77 }

2、由于所有的数据库实体都是有主键的,所以这里定义一个BaseModel,这里我用的主键是Guid,你们可以换成int

11 using System; 22 33 namespace Dinner.Dapper 44 { 55 public class BaseModel : IEntity<Guid> 66 { 77 public Guid Id { get; set; } 88 } 99 }

3、接下来是封装Dapper的SqlServer配置DataBaseConfig(Redis的配置你们可以忽略),不要忘记添加Dapper的Nuget包

1 1 using StackExchange.Redis; 2 2 using System.Data; 3 3 using System.Data.SqlClient; 4 4 5 5 namespace Dinner.Dapper 6 6 { 7 7 public class DataBaseConfig 8 8 { 9 9 #region SqlServer链接配置 1010 1111 private static string DefaultSqlConnectionString = @"Data Source=localhost;Initial Catalog=Dinner;User ID=sa;Password=123456;"; 1212 private static string DefaultRedisString = "localhost, abortConnect=false"; 1313 private static ConnectionMultiplexer redis; 1414 1515 public static IDbConnection GetSqlConnection(string sqlConnectionString = null) 1616 { 1717 if (string.IsNullOrWhiteSpace(sqlConnectionString)) 1818 { 1919 sqlConnectionString = DefaultSqlConnectionString; 2020 } 2121 IDbConnection conn = new SqlConnection(sqlConnectionString); 2222 conn.Open(); 2323 return conn; 2424 } 2525 2626 #endregion 2727 2828 #region Redis链接配置 2929 3030 private static ConnectionMultiplexer GetRedis(string redisString = null) 3131 { 3232 if (string.IsNullOrWhiteSpace(redisString)) 3333 { 3434 redisString = DefaultRedisString; 3535 } 3636 if (redis == null || redis.IsConnected) 3737 { 3838 redis = ConnectionMultiplexer.Connect(redisString); 3939 } 4040 return redis; 4141 } 4242 4343 #endregion 4444 } 4545 }

4、然后是仓储基接口IRepositoryBase,添加了基本的增删改查和一个无参的存储过程

1 1 using System; 2 2 using System.Collections.Generic; 3 3 using System.Threading.Tasks; 4 4 5 5 namespace Dinner.Dapper 6 6 { 7 7 public interface IRepositoryBase<T> 8 8 { 9 9 Task Insert(T entity, string insertSql); 1010 1111 Task Update(T entity, string updateSql); 1212 1313 Task Delete(Guid Id, string deleteSql); 1414 1515 Task<List<T>> Select(string selectSql); 1616 1717 Task<T> Detail(Guid Id, string detailSql); 1818 1919 /// <summary> 2020 /// 无参存储过程 2121 /// </summary> 2222 /// <param name="SPName"></param> 2323 /// <param name="args"></param> 2424 /// <returns></returns> 2525 Task<List<T>> ExecQuerySP(string SPName); 2626 } 2727 }

View Code

5、仓储基实现类RepositoryBase继承仓储基接口,简单实现增删改查和无参的存储过程

1 1 using Dapper; 2 2 using System; 3 3 using System.Collections.Generic; 4 4 using System.Data; 5 5 using System.Linq; 6 6 using System.Threading.Tasks; 7 7 8 8 namespace Dinner.Dapper 9 9 { 1010 public class RepositoryBase<T> : IRepositoryBase<T> 1111 { 1212 public async Task Delete(Guid Id, string deleteSql) 1313 { 1414 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 1515 { 1616 await conn.ExecuteAsync(deleteSql, new { Id = Id }); 1717 } 1818 } 1919 2020 public async Task<T> Detail(Guid Id, string detailSql) 2121 { 2222 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 2323 { 2424 //string querySql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users WHERE Id=@Id"; 2525 return await conn.QueryFirstOrDefaultAsync<T>(detailSql, new { Id = Id }); 2626 } 2727 } 2828 2929 /// <summary> 3030 /// 无参存储过程 3131 /// </summary> 3232 /// <param name="SPName"></param> 3333 /// <returns></returns> 3434 public async Task<List<T>> ExecQuerySP(string SPName) 3535 { 3636 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 3737 { 3838 return await Task.Run(() => conn.Query<T>(SPName, null, null, true, null, CommandType.StoredProcedure).ToList()); 3939 } 4040 } 4141 4242 public async Task Insert(T entity, string insertSql) 4343 { 4444 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 4545 { 4646 await conn.ExecuteAsync(insertSql, entity); 4747 } 4848 } 4949 5050 public async Task<List<T>> Select(string selectSql) 5151 { 5252 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 5353 { 5454 //string selectSql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM dbo.Users"; 5555 return await Task.Run(()=>conn.Query<T>(selectSql).ToList()); 5656 } 5757 } 5858 5959 public async Task Update(T entity, string updateSql) 6060 { 6161 using (IDbConnection conn = DataBaseConfig.GetSqlConnection()) 6262 { 6363 await conn.ExecuteAsync(updateSql, entity); 6464 } 6565 } 6666 } 6767 }

View Code

上面这些就是底层基本的封装,下一节我们来添加实体和仓储

源码地址: https://github.com/wangyulong0505/Dinner

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

NetCore+Dapper WebApi架构搭建(二):底层封装 - HelloWorld