基于 Dapper 的一个 DbUtils
/// <summary>
/// v1.0
/// </summary>
public partial class DbUtils
{
string ConnectionString;
/// <summary>
///
/// </summary>
/// <param name="dbName"></param>
public DbUtils(string dbName)
{
ConnectionString = $"server=.;database={dbName};uid=;pwd=;";
} IDbConnection OpenConnection()
{
var conn = new NpgsqlConnection(ConnectionString);
conn.Open();
return conn;
} public int Execute(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = conn.Execute(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public T ExecuteScalar<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = conn.ExecuteScalar<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = conn.Query<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public IEnumerable<T> Query<T>(string sql, int page, int limit, object param = null, IDbTransaction transaction = null)
{
int offset = (page - ) * limit;
sql += $" limit {limit} offset {offset}";
return Query<T>(sql, param);
} public T QueryFirst<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = conn.QueryFirst<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public T QueryFirstOrDefault<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = conn.QueryFirstOrDefault<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} //public static T QueryMultiple<T>(string sql, object param = null, IDbTransaction transaction = null)
//{
// using (var conn = OpenConnection())
// {
// var result = conn.QueryMultiple(sql, param, transaction);
// conn.Close();
// conn.Dispose();
// return result;
// }
//} public async Task<int> ExecuteAsync(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = await conn.ExecuteAsync(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public async Task<T> ExecuteScalarAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = await conn.ExecuteScalarAsync<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public async Task<IEnumerable<T>> QueryAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = await conn.QueryAsync<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public async Task<IEnumerable<T>> QueryAsync<T>(string sql, int page, int limit, object param = null, IDbTransaction transaction = null)
{
int offset = (page - ) * limit;
sql += $" limit {limit} offset {offset}";
return await QueryAsync<T>(sql, param);
} public async Task<T> QueryFirstAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = await conn.QueryFirstAsync<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
} public async Task<T> QueryFirstOrDefaultAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
{
using (var conn = OpenConnection())
{
var result = await conn.QueryFirstOrDefaultAsync<T>(sql, param, transaction);
conn.Close();
conn.Dispose();
return result;
}
}
}
/// <summary>
///
/// </summary>
public partial class DbUtils
{
/// <summary>
///
/// </summary>
/// <param name="table"></param>
/// <param name="fields"></param>
/// <returns></returns>
public static string GetInsertSQL(string table, string fields)
{
return $"INSERT INTO {table}({fields}) VALUES ({GetInsertFields(fields)});";
}
/// <summary>
///
/// </summary>
/// <param name="table"></param>
/// <param name="fields"></param>
/// <returns></returns>
public static string GetInsertSQLReturnId(string table, string fields)
{
return $"INSERT INTO {table}({fields}) VALUES ({GetInsertFields(fields)}) RETURNING Id;";
}
/// <summary>
///
/// </summary>
/// <param name="talbe"></param>
/// <param name="fields"></param>
/// <returns></returns>
public static string GetUpdateSQL(string talbe, string fields)
{
return $"UPDATE {talbe} SET {GetUpdateFields(fields)} where id=@id";
} static string GetInsertFields(string value)
{
var result = value.Split(new[] { ',', ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
var fields = string.Join(",@", result);
return "@" + fields;
} static string GetUpdateFields(string value)
{
var collection = value.Split(new[] { ',', ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); var sb = new StringBuilder();
foreach (var item in collection)
{
sb.Append(item);
sb.Append("=@");
sb.Append(item);
sb.Append(",");
} if (sb.Length > )
sb.Remove(sb.Length - , ); return sb.ToString();
}
}
基于 Dapper 的一个 DbUtils的更多相关文章
- 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...
- DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架
为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity Framework 我喜欢傻瓜化使用方式的框架,同时又不失灵活性. EF虽然使用起来足够简单 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- 【原创】打造基于Dapper的数据访问层
[原创]打造基于Dapper的数据访问层 前言 闲来无事,花几天功夫将之前项目里用到的一个数据访问层整理了出来.实现单个实体的增删改查,可执行存储过程,可输出返回参数,查询结果集可根据实际情况返回 ...
- Dapper.Common基于Dapper的开源LINQ超轻量扩展
Dapper.Common Dapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则.链式调用.配置简单.上手快,支持Mysql,Sqlserver(目 ...
- 分享自己写的基于Dapper的轻量级ORM框架~
1.说明 本项目是一个使用.NET Standard 2.0开发的,基于 Dapper 的轻量级 ORM 框架,包含基本的CRUD以及根据表达式进行一些操作的方法,目前只针对单表,不包含多表连接操作. ...
- .NetCore学习笔记:二、基于Dapper的泛型Repository
为减少代码量,这里实现一个基于Dapper的泛型Repository. 这里需要引用Dapper.dll和Dapper.Contrib.dll. 接口定义: /// <summary> / ...
- .net core 基于Dapper 的分库分表开源框架(core-data)
一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...
- 基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger
微信搜索公众号 「程序员白泽」,进入白泽的编程知识分享星球 最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学.下面我将从原理到demo为大家一一进行讲解,欢迎评论 ...
随机推荐
- Linux 入门记录:十三、Linux 扩展权限
一.默认权限 每一个终端都有一个 umask 属性,是用来确定新建文件或目录的默认权限的“掩码”(mask 有“掩码”的含义,至于 u,后面说). Linux 中一般有默认的权限掩码,使用命令 uma ...
- python基础===继承和多继承
继承 class A: def spam(self): print("A.SPAM") def add(self, x,y): return x+y class B(A): def ...
- glom模块的使用(一)
glom模块的使用 简单说下glom模块主要是处理结构化数据用的,安装简单pip install glom即可,下面就glom的方法参数做例子讲解. glom 和模块同名的glom方法使用方法: .g ...
- 用pyperclip 模块拷贝粘贴字符串
>>> import pyperclip>>> pyperclip.copy('Hello world!')>>> pyperclip.paste ...
- [New Learn] RunLoop学习-官方译文
Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...
- ExecutorService 用例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Tes ...
- C# 中从程序中下载Excel模板
方法一: #region 下载模板 /// <summary> /// 下载模板 /// </summary> /// <param name="sender& ...
- AC日记——「SCOI2015」国旗计划 LiBreOJ 2007
#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...
- Eclipse IDE下的Spring框架使用简单实例
Eclipse IDE下的Spring框架使用简单实例 1 准备Java jdk安装. Eclipse软件安装.根据系统安装32/64版本,选择Eclipse IDE for Java Develop ...
- 多线程下,Python Sqlite3报[SQLite objects created in a thread can only be used...]问题
明明加了锁保护,还是出了下面的问题 ProgrammingError: SQLite objects created in a thread can only be used in that same ...