基于 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为大家一一进行讲解,欢迎评论 ...
随机推荐
- java===java基础学习(7)---用户自定义类
package testbotoo; import java.util.*; public class EmployeeTest { public static void main(String[] ...
- Open Compute Project
Open Compute Project https://github.com/opencomputeproject https://github.com/floodlight/floodlight ...
- python近期遇到的一些面试问题(二)
1. 解释什么是栈溢出,在什么情况下可能出现. 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围.在Python中, ...
- vue点击切换颜色限制个数(用了mui框架)
vue点击切换颜色 只能点击一个 <!doctype html> <head> <meta charset="UTF-8"> <title ...
- 给mongodb设置密码权限
昨天装了个mongodb数据库用于测试用,装好后没有密码,现在就讲讲怎么设置密码 1.首先进入C:\mongodb\bin下面运行mongod.exe启动数据库. 2.在相同目录下启动mongo.ex ...
- Linux平台用C++实现事件对象,同步线程(转)
本文属于转载,原文链接如下:http://blog.csdn.net/chexlong/article/details/7080537 与其相关的一组API包括:pthread_mutex_init, ...
- REST,Web 服务,REST-ful 服务
介绍 REpresentational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识.RESTful Web 服务的关键特点是明 ...
- iframe弹出框js ie6下存在bug
ie6的iframe在第一次加载的显示不出来,显示空白,但是很奇怪,刷新就可以正常显示了,一开始以为这只是IE6下iframe加载的bug,但是最后结果发现这是ie6下javascript延迟加载出现 ...
- 设置Eclipse/MyEclipse中编辑界面点击任何文件后Package Explorer导航自动定位该文件
原文:http://www.myexception.cn/eclipse/425836.html 设置步骤: 导航Package Explorer的右上角有一个黄色双向箭头图标,鼠标移动到上面提示“L ...
- JVM内存分配与回收
1.内存分配与回收策略 内存自动管理:自动化的解决了对象内存分配和回收对象内存的问题. 一般在堆上分配对象,也可能经过JTI编译后间接在栈上分配. 主要分配在新生代的Eden区,如果启动了本地线程分配 ...