1:Dapper的查询帮助类,部分代码,其它新增更新删除可以自行扩展

using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Text; namespace FEG.ESB.Data.EF
{
using Dapper;
using MySql.Data.MySqlClient;
using System.Threading.Tasks;
using static Dapper.SqlMapper; /// <summary>
///
/// </summary>
public class FEG_DapperHelper
{
private static string str = FEG_ConfigHelper.GetDbConnectionStr(); /// <summary>
/// 查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static IEnumerable<T> Query<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return conn.Query<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} /// <summary>
/// 查询 异步操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static async Task<IEnumerable<T>> QueryAsync<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return await conn.QueryAsync<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} #region old
///// <summary>
///// 查询两个实体的操作
///// </summary>
///// <param name="sql"></param>
///// <param name="parames"></param>
///// <returns></returns>
//public static Tuple<IEnumerable<T>, IEnumerable<M>> QueryTwoEntity<T, M>(string sql, object parames = null) where T : class where M : class, new()
//{
// try
// {
// using MySqlConnection conn = GetMySqlConnnetion();
// var readData = conn.QueryMultiple(sql, parames);
// var obj = readData.Read<T>() as IEnumerable<T>;
// var obj2 = readData.Read<M>() as IEnumerable<M>;
// return (obj, obj2).ToTuple();
// }
// catch (Exception)
// {
// return null;
// }
//}
#endregion /// <summary>
/// 同时查询多个实体的操作
/// </summary>
/// <param name="sql"></param>
/// <param name="funcObj"></param>
/// <param name="dicParams"></param>
/// <returns></returns>
public static void QueryMultipeEntity(string sql, Dictionary<string, object> dicParams, Action<GridReader> funcObj)
{
using MySqlConnection conn = GetMySqlConnnetion();
if (dicParams != null)
{
DynamicParameters ps = new DynamicParameters();
foreach (string item in dicParams.Keys)
{
ps.Add(item, dicParams[item]);
}
using (var readRsult = conn.QueryMultiple(sql, ps))
{
funcObj.Invoke(readRsult);
}
}
} /// <summary>
/// 获取 MySql连接
/// </summary>
/// <returns></returns>
private static MySqlConnection GetMySqlConnnetion()
{
return new MySqlConnection(str);
} /// <summary>
/// 获取Dapper参数化对象,这里直接New来处理,不到处引入命名空间
/// </summary>
/// <returns></returns>
public static DynamicParameters GetDynamicParameters()
{
return new DynamicParameters();
}
} /// <summary>
///
/// </summary>
public class FEG_ConfigHelper
{
public static IConfiguration _configuration { get; set; }
/// <summary>
/// 获取连接数据库的字符串
/// </summary>
/// <returns></returns>
public static string GetDbConnectionStr()
{
return _configuration.GetSection("ConnectionStrings:ReadonlyConnection").Value;
} /// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetAppSettingValueByKey(string key)
{
return _configuration.GetSection(key).Value;
} /// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetAppSettingEntity<T>(string key) where T : class, new()
{
return _configuration.GetSection(key).Value as T;
}
}
}

2:调用的代码:

 /// <summary>
/// Test dapper,同时查询多个表的操作
/// </summary>
/// <returns></returns>
[HttpPost,Route("TestGridReader")]
public BasisApiResult TestGridReader()
{
BasisApiResult result = new BasisApiResult();
result.data = _personnelService.TestGridReader<FEG.ESB.Data.Model.personnel, FEG.ESB.Data.Model.course>();
return result;
}
       public Tuple<IEnumerable<T>, IEnumerable<M>> TestGridReader<T, M>()
{
IEnumerable<T> plist = null;
IEnumerable<M> clist = null;
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("isdel", "0");
FEG_DapperHelper.QueryMultipeEntity("select * from personnel where isdel=@isdel limit 0,1;select * from course where isdel=@isdel limit 0,1;", dic, x =>
{
plist = x.Read<T>().ToList();
clist = x.Read<M>().ToList();
});
return Tuple.Create(plist, clist);
}

3:测试OK截图:

Dapper同时操作任意多张表的实现的更多相关文章

  1. 多对多第三张表的创建方式 和 forms组件的使用

    目录 一.多对多第三张表的创建 1. 全自动方式 (1)实现代码 (2)优点和不足 2. 纯手撸方式(了解) (1)实现代码 (2)优点和不足 3. 半自动方式(推荐使用) (1)实现代码 (2)优点 ...

  2. ORM多表操作之创建关联表及添加表记录

    创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...

  3. 实现多个ContentProvider对多张表进行操作

    http://blog.csdn.net/maylian7700/article/details/7365373 SQLite数据库直接操作类: DatabaseHelper.java package ...

  4. 一起学Hadoop——实现两张表之间的连接操作

    ---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...

  5. (10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  6. android 玩转ContentProvider之二--实现多个ContentProvider对多张表进行操作

    SQLite数据库直接操作类: DatabaseHelper.java package com.jacp.database; import android.content.Context; impor ...

  7. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  8. update操作多张表

    sql 语句多张表UPDATE用法一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园并且要注意,当用 ...

  9. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

随机推荐

  1. npm 报错 : npm ERR! Maximum call stack size exceeded

    解决方法:https://blog.csdn.net/caijunfen/article/details/81009797

  2. Gitlab-500错误的恢复

    一.问题截图 二.定位问题 2.1.查看状态 # 查看状态 gitlab-ctl status # 如图发现gitaly 是down的状态 2.2.查看日志 # 查看日志 gitlab-ctl tai ...

  3. 第4天 JavaDoc生成文档&Java流程控制(第一节:用户交互Scanner)

    JavaDoc生成文档 javadoc命令是用来生成自己的API文档 参数信息: @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @ ...

  4. 【原创】case、casez和casex谁是谁

    在Verilog中case语句经常用于多分支表决的结构,case后的表达式会与各分支表达式"全等"那么对应的分支会被执行.其基本结构如下: case(expression) exp ...

  5. Python - 基础数据类型 set 集合

    集合的简介 集合是一个无序.不重复的序列 它的基本用法包括成员检测和消除重复元素 集合对象也支持像 联合,交集,差集,对称差分等数学运算 集合中所有的元素放在 {} 中间,并用逗号分开 集合的栗子 这 ...

  6. (python函数01)enumerate函数

    enumerate函数 enumerate函数示例代码01运行结果01示例代码02运行结果02 enumerate(枚举,列举)是python的内置函数,enumerate的参数为可迭代对象,如字符串 ...

  7. HTML5(五)——Canvas API

    什么是 Canvas API? Canvas API(画布)提供了一个通过 javascript 和 html 的 canvas 元素来在网页上实时绘制图形的方式.可用于动画.游戏.图标.图片编辑等多 ...

  8. java类与对象基础篇

    java面向对象基础篇 面向对象程序设计(Object Oriented Proframming ,OOP) 面向对象的本质是:以类的方式组织代码,以对象的方式组织(封装)数据. 面向对象的核心思想是 ...

  9. 论文笔记:(ICML2020)On Learning Sets of Symmetric Elements

    目录 摘要 一.引言 二.先前的工作 三.基础 3.1 符号和基本定义 3.2 G-不变网络 3.3 描述等变层 3.4 Deep sets 四.DSS层 4.1 对称元素集合 4.2 等变层的表征 ...

  10. flink clickhouse-jdbc和flink-connector 写入数据到clickhouse因为jar包冲突导致的60 seconds.Please check if the requested resources are available in the YARN cluster和Could not resolve ResourceManager address akka报错血案

    一.问题现象,使用flink on yarn 模式,写入数据到clickhouse,但是在yarn 集群充足的情况下一直报:Deployment took more than 60 seconds. ...