/// <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的更多相关文章

  1. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  2. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架

    为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity Framework 我喜欢傻瓜化使用方式的框架,同时又不失灵活性. EF虽然使用起来足够简单 ...

  3. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...

  4. 【原创】打造基于Dapper的数据访问层

    [原创]打造基于Dapper的数据访问层   前言 闲来无事,花几天功夫将之前项目里用到的一个数据访问层整理了出来.实现单个实体的增删改查,可执行存储过程,可输出返回参数,查询结果集可根据实际情况返回 ...

  5. Dapper.Common基于Dapper的开源LINQ超轻量扩展

    Dapper.Common Dapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则.链式调用.配置简单.上手快,支持Mysql,Sqlserver(目 ...

  6. 分享自己写的基于Dapper的轻量级ORM框架~

    1.说明 本项目是一个使用.NET Standard 2.0开发的,基于 Dapper 的轻量级 ORM 框架,包含基本的CRUD以及根据表达式进行一些操作的方法,目前只针对单表,不包含多表连接操作. ...

  7. .NetCore学习笔记:二、基于Dapper的泛型Repository

    为减少代码量,这里实现一个基于Dapper的泛型Repository. 这里需要引用Dapper.dll和Dapper.Contrib.dll. 接口定义: /// <summary> / ...

  8. .net core 基于Dapper 的分库分表开源框架(core-data)

    一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...

  9. 基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger

    微信搜索公众号 「程序员白泽」,进入白泽的编程知识分享星球 最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学.下面我将从原理到demo为大家一一进行讲解,欢迎评论 ...

随机推荐

  1. pam会话函数详解

    pam会话函数详解 http://www.xuebuyuan.com/2223069.html http://blog.itpub.net/15480802/viewspace-1406088/ ht ...

  2. ltsdangerous加密解密

    前言 在做QQ第三方登录时,用户跳转到QQ登录界面登录成功后,会在URL返回一个code参数.前端把code发送给后端.后端收到后,会查询出openid.然后判断openid是否存在,如果存在就可以绑 ...

  3. 【msgpack-python】安装

    1.安装pip:http://blog.iyestin.com/2014/03/15/python-pip-install/ http://www.linuxde.net/2014/05/15576. ...

  4. 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式

    上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...

  5. hdu 3667(最小费用最大流+拆边)

    Transportation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. window下线程同步之(原子锁)

    原子锁:当多个线程同时对同一资源进行操作时,由于线程间资源的抢占,会导致操作的结果丢失或者不是我们预期的结果. 比如:线程A对一个变量进行var++操作,线程B也执行var++操作,当线程A执行var ...

  7. maven项目的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0 " 2 xmlns:xsi="http://www.w3.org ...

  8. 前端获得session信息方式对比,优化

    在开发中,页面 js 经常会遇到需要 当前登录用户信息(菜单权限,用户基本信息,配置信息) 的地方,一般情况我们可能对这些信息获取方式不是太在意,但是现在的前端通过webpack打包,即使做了代码分割 ...

  9. [BZOJ4566][Haoi2016]找相同字符 后缀自动机+dp

    4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1212  Solved: 694[Submit][Stat ...

  10. hdu多校第三场

    Problem D. Euler Function 思路:打表找找规律. #include<bits/stdc++.h> #define LL long long #define fi f ...