.net 6基本封装使用Dapper,Mysql,sql server数据库

25 篇文章 7 订阅
  1. 安装NuGet包:Dapper和MySql.Data,如果是sql server数据库则安装System.Data.SqlClient
    在这里插入图片描述
  2. 新建Dapper文件夹,里面新建BaseDBContext上下文类
    在这里插入图片描述
    代码内容:
using MySql.Data.MySqlClient;
using System.Data;
using System.Data.SqlClient;

namespace WebApplication1.Dapper
{
    public class BaseDBContext
    {
        private string connectionString;
        public IDbConnection Connection { get; set; }
        //mysql数据库
        public BaseDBContext(string settings)
        {
            connectionString = settings;
            Connection = new MySqlConnection(connectionString);
        }
        //sql server数据库
        //public BaseDBContext(string settings)
        //{
        //    connectionString = settings;
        //    Connection = new SqlConnection(connectionString);
        //}

    }
}

  1. 新建Models文件夹,在里面新建一个表类:
    在这里插入图片描述
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace WebApplication1.Models
{
    public class City
    {
        [Key]
        public int Id { get; set; }
        [Column(TypeName = "nvarchar(100)")]
        public string Name { get; set; }

        [Column(TypeName = "nvarchar(100)")]
        public string AreaCode { get; set; }
    }
}

在数据库也准备属性表名一样的表:
在这里插入图片描述
4. 新建接口文件夹IRepository用于存放接口,新建IBaseRepository类,封装基础增删改查:
在这里插入图片描述

namespace WebApplication1.IRepository
{
    public interface IBaseRepository<T> 
    {
        Task Insert(T entity, string insertSql);

        Task Update(T entity, string updateSql);

        Task Delete(int Id, string deleteSql);

        Task<List<T>> SelectAsync(string selectSql);

        Task<T> GetOne(int Id, string selectOneSql);

        Task<List<T>> GetList(int Id, string selectSql);
    }
}

再新建ICityRepository表接口类,继承IBaseRepository:
在这里插入图片描述

using WebApplication1.Models;

namespace WebApplication1.IRepository
{
    public interface ICityRepository:IBaseRepository<City>
    {
        //查询所有数据
        public Task<List<City>> query();
    }
}
  1. 新建实现接口的文件夹Repository用于存放实现接口的类,在下面新建两个类BaseRepository,CityRepository用于实现刚才声明的接口
    在这里插入图片描述
    BaseRepository继承IBaseRepository,实现IBaseRepository的接口,代码如下:

using Dapper;
using System.Data;
using WebApplication1.Dapper;
using WebApplication1.IRepository;

namespace WebApplication1.Repository
{
    public class BaseRepository<T> : IBaseRepository<T> where T : class, new()
    {
        public BaseDBContext _baseDB;
        public BaseRepository(BaseDBContext baseDB)
        {
            _baseDB = baseDB;
        }
        public async Task Delete(int Id, string deleteSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.ExecuteAsync(deleteSql, new { Id = Id });
            }
        }

        public async Task<T> GetOne(int Id, string selectOneSql)
        {

            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                var result = await dbConnection.QueryFirstOrDefaultAsync<T>(selectOneSql, new { Id = Id });
                return result;
            }
        }
        public async Task<List<T>> GetList(int Id, string selectSql)
        {

            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query<T>(selectSql, new { Id = Id }).ToList());
            }
        }
        public async Task Insert(T entity, string insertSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.QueryFirstOrDefaultAsync<T>(insertSql, entity);
            }
        }

        public async Task<List<T>> SelectAsync(string selectSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query<T>(selectSql).ToList());
            }
        }

        public async Task Update(T entity, string updateSql)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                await dbConnection.ExecuteAsync(updateSql, entity);
            }
        }

        public async Task<List<T>> GetByDynamicParams(string sqlText, DynamicParameters dynamicParams)
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query<T>(sqlText, dynamicParams).ToList());
            }
        }
    }
}

CityRepository继承ICityRepository,实现ICityRepository的接口,代码如下:

using Dapper;
using System.Data;
using WebApplication1.Dapper;
using WebApplication1.IRepository;
using WebApplication1.Models;

namespace WebApplication1.Repository
{
    public class CityRepository : BaseRepository<City>, ICityRepository
    {
        public BaseDBContext _baseDB;
        public CityRepository(BaseDBContext baseDB) : base(baseDB)
        {
            _baseDB = baseDB;
        }
        public async Task<List<City>> query()
        {
            using (IDbConnection dbConnection = _baseDB.Connection)
            {
                dbConnection.Open();
                return await Task.Run(() => dbConnection.Query<City>("select * from City").ToList());
            }
        }
    }
}

  1. 在appsettings.json中添加数据库连接字符串,下面我用的是mysql的连接串:
"ConnectionStrings": {
    "DbConnectionString": " Data Source=localhost;Database=efcodetest;AllowLoadLocalInfile=true;User ID=root;Password=123456;allowPublicKeyRetrieval=true;pooling=true;CharSet=utf8;port=3306;sslmode=none;"
  }

在这里插入图片描述
6. 依赖注入,在Program.cs里面添加刚才声明实现几个类的依赖注入:

builder.Services.AddSingleton(sp => new BaseDBContext(
    builder.Configuration.GetConnectionString("DbConnectionString")
));

builder.Services.AddScoped<ICityRepository, CityRepository>();

在这里插入图片描述
7. 新建api测试:
在这里插入图片描述
代码:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.IRepository;

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CityController : ControllerBase
    {
        private ICityRepository Repository;
        public CityController(ICityRepository _repository)
        {
            Repository = _repository;
        }
        [HttpGet("query")]
        public async Task<object> query() => await Repository.query();
    }
}

请求结果和数据库对比:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值