自己 简单封装的 dapper help 类



using Dapper;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using ToneCommon.CommonMethod;

namespace ToneFramework
{
    public sealed class DapperHelper
    {
        static readonly DapperHelper instance = null;

        private static IConfiguration Configuration = ConfigurationHelper.GetConfiguration("appsettings.json");
        private static string ConnectionStr = Configuration["SQLServer"];

        private DapperHelper()
        {
        }
        static DapperHelper()
        {

            instance = new DapperHelper();
        }

        /// <summary>
        /// 获取实例
        /// </summary>
        /// <returns></returns>
        public static DapperHelper GetInstance()//string connectionString
        {
            return instance;
        }

        /// <summary>
        /// 获取数据连接
        /// </summary>
        /// <returns></returns>
        public SqlConnection GetConnection()
        {
            SqlConnection connection = new SqlConnection(ConnectionStr);  //这里sqlconnection就是数据库连接字符串
            return connection;
        }
        /// <summary>
        /// 打开获取的连接
        /// </summary>
        /// <returns></returns>
        public SqlConnection OpenConnection()
        {
            SqlConnection connection = GetConnection();
            connection.Open();
            return connection;
        }



        /// <summary>
        /// 插入 一个实体
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        /// <returns>实体id</returns>
        public Guid Insert<TEntity>(TEntity entity) where TEntity : DBBaseModel
        {
            if (entity == null)
            {
                throw new Exception("传入数据不可为null!");
            }
            if (entity.Id == Guid.Empty)
            {
                throw new Exception("传入数据Id不可为空!");
            }
            Type type = typeof(TEntity);
            var propArray = type.GetProperties();//.Where(p => !p.Name.Equals("Id"));
            string columnString = string.Join(",", propArray.Select(p => $"[{p.Name}] "));
            string valuesString = string.Join(",", propArray.Select(p => $"@{p.Name} "));
            string sql = $"  INSERT INTO  [{type.Name}]  ( {columnString} )   VALUES ( {valuesString} ) ; ";

            using (SqlConnection conn = OpenConnection())
            {
                if (GetConnection().Execute(sql, entity) < 1)
                {
                    throw new Exception("插入不成功。");
                }
            }

            return entity.Id;
        }



        /// <summary>
        /// 执行选择单个值的参数化SQL。
        /// </summary>
        /// <param name="sql"></param>
        /// <returns>返回类型。</returns>
        public T ExecuteScalar<T>(string sql, object param = null)
        {
            using (SqlConnection conn = OpenConnection())
            {
                return SqlMapper.ExecuteScalar<T>(conn, sql, param);
            }
        }

        /// <summary>
        /// 根据id 查询实体
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="id"></param>
        /// <returns></returns>
        public TEntity GetById<TEntity>(Guid id) where TEntity : DBBaseModel
        {
            using (IDbConnection cnn = OpenConnection())
            {
                string sql = $"SELECT * FROM  [{typeof(TEntity).Name}]  WHERE Id={id} ";
                return cnn.Query<TEntity>(sql).FirstOrDefault();
            }
        }

        /// <summary>
        /// 修改实体
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        public void Update<TEntity>(TEntity entity) where TEntity : DBBaseModel
        {
            if (entity == null)
            {
                throw new Exception("传入数据不可为null!");
            }
            Type type = typeof(TEntity);
            var propArray = type.GetProperties().Where(p => !p.Name.Equals("Id"));
            string columnString = string.Join(",", propArray.Select(p => $"[{p.Name}]=@{p.Name}"));
            string sql = $"UPDATE [{type.Name}] SET {columnString} WHERE Id={entity.Id}  ";
            using (SqlConnection conn = OpenConnection())
            {
                if (GetConnection().Execute(sql, entity) < 1)
                {
                    throw new Exception("Update数据不存在");
                }
            }

        }

        /// <summary>
        /// 根据 实体 id 删除 实体
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="id"></param>
        public void Delete<TEntity>(int id) where TEntity : DBBaseModel
        {
            int affectCount = 0;
            string sql = $"SELECT * FROM  [{typeof(TEntity).Name}]  WHERE Id={id}  ";
            using (SqlConnection conn = OpenConnection())
            {
                using (SqlCommand command = new SqlCommand(sql, conn))
                {
                    affectCount = command.ExecuteNonQuery();
                    if (affectCount == 0)
                    {
                        throw new Exception("Delete数据不存在");
                    }
                }
            }
        }

        /// <summary>
        /// 执行 sql 语句 返回影响行数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public int ExecuteSql(string sql, object param = null)
        {
            using (SqlConnection conn = OpenConnection())
            {
                return conn.Execute(sql, param);
            }
        }


        /// <summary>
        /// 执行sql 语句返回 结果集
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public IEnumerable<dynamic> Query(string sql, object param = null)
        {
            using (SqlConnection conn = OpenConnection())
            {
                return SqlMapper.Query(conn, sql, param);
            }
        }

        /// <summary>
        /// 执行sql 语句返回 结果集
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public IEnumerable<T> Query<T>(string sql, object param = null) where T : class, new()
        {
            using (SqlConnection conn = OpenConnection())
            {
                return SqlMapper.Query<T>(conn, sql, param);
            }
        }



    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace ToneFramework
{
    /// <summary>
    /// 数据库 基础model (主要用于约束 主键)
    /// </summary>
    public class DBBaseModel
    {
        /// <summary>
        /// 主键
        /// </summary>
        public Guid Id { get; set; }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值