Dapper的入门

Dapper 是一个轻量级的对象关系映射 (ORM) 工具,用于在.NET应用程序中处理数据库操作。ORM 是一种编程技术,它将关系数据库和面向对象编程语言之间的数据转换和交互进行了封装和简化。Dapper 提供了一种简单、高效的方式来执行数据库查询、插入、更新和删除操作。

以下是 Dapper 的一些主要特点和用途:

  1. 高性能:Dapper 的设计目标之一是提供快速的数据库访问性能。它使用了轻量级的映射和缓存机制,避免了复杂的对象关系映射操作,从而提供了较高的执行速度。

  2. 简单易用:Dapper 提供了简洁而直观的 API,使开发人员能够以一种更自然的方式执行数据库操作。它扩展了 ADO.NET 的基本功能,并提供了更简单的查询和参数化查询语法。

  3. 支持多种数据库:Dapper 可以与多种关系型数据库一起使用,包括 SQL Server、MySQL、Oracle、PostgreSQL 等。

下面是一个使用 Dapper 进行数据库查询和插入的示例:

using System.Data; // 导入 System.Data 命名空间,用于使用 ADO.NET
using System.Data.SqlClient; // 导入 System.Data.SqlClient 命名空间,用于 SQL Server 特定功能
using Dapper; // 导入 Dapper 命名空间,用于使用 Dapper ORMpublic class CustomerRepository
{private readonly string connectionString; // 声明一个私有的只读字段,用于存储连接字符串public CustomerRepository(string connectionString) // 构造函数,接受连接字符串参数{this.connectionString = connectionString; // 将提供的连接字符串赋值给字段}public Customer GetCustomer(int customerId) // 方法,通过 ID 检索客户信息{using (var connection = new SqlConnection(connectionString)) // 使用提供的连接字符串创建一个新的 SqlConnection{connection.Open(); // 打开数据库连接var query = "SELECT * FROM Customers WHERE Id = @CustomerId"; // SQL 查询语句,用于检索指定 ID 的客户var parameters = new { CustomerId = customerId }; // 匿名对象,用于保存查询参数return connection.QuerySingleOrDefault<Customer>(query, parameters); // 执行查询并返回单个 Customer 对象}}public void InsertCustomer(Customer customer) // 方法,用于插入新客户{using (var connection = new SqlConnection(connectionString)) // 使用提供的连接字符串创建一个新的 SqlConnection{connection.Open(); // 打开数据库连接var query = "INSERT INTO Customers (Name, Email) VALUES (@Name, @Email)"; // SQL 插入语句,用于插入新客户connection.Execute(query, customer); // 执行查询,并使用 customer 对象作为参数}}
}

在上述示例中,我们创建了一个 CustomerRepository 类来执行与 Customers 数据表相关的操作。在 GetCustomer 方法中,我们使用 Dapper 的 QuerySingleOrDefault 方法执行了一个查询操作,返回了单个 Customer 对象。在 InsertCustomer 方法中,我们使用 Dapper 的 Execute 方法执行了一个插入操作,将 Customer 对象写入数据库。

IDbConnection 接口是 ADO.NET 中定义的一个抽象接口,用于表示与数据库之间的连接。它定义了一组用于执行数据库操作的方法,如执行查询、插入、更新和删除等。IDbConnection 接口提供了一种通用的方式来处理不同类型的数据库连接,包括 SQL Server、MySQL、Oracle 等。

以下是 IDbConnection 接口的一些常用方法:

  1. Open():打开数据库连接。

  2. Close():关闭数据库连接。

  3. Execute():执行不返回结果集的 SQL 命令,如插入、更新和删除操作。

  4. Query():执行查询操作,并返回一个结果集。

  5. QueryFirstOrDefault():执行查询操作,并返回结果集中的第一行数据。

  6. QuerySingleOrDefault():执行查询操作,并返回结果集中的单个数据行。

  7. ExecuteScalar():执行查询,并返回结果集中的第一行第一列的值。

IDbConnection 接口是用于与数据库建立连接并执行数据库操作的核心接口。它提供了基本的数据库访问功能,但不涉及具体的对象关系映射 (ORM) 功能,这是 Dapper 等 ORM 工具所提供的功能。

以下是一个使用 IDbConnection 接口执行查询操作的示例:

using System.Data;
using System.Data.SqlClient;public class CustomerRepository
{private readonly IDbConnection connection;public CustomerRepository(string connectionString){connection = new SqlConnection(connectionString);}public Customer GetCustomer(int customerId){using (connection){connection.Open();var query = "SELECT * FROM Customers WHERE Id = @CustomerId";var parameters = new { CustomerId = customerId };return connection.QuerySingleOrDefault<Customer>(query, parameters);}}
}

在上述示例中,我们在 CustomerRepository 类中使用了 IDbConnection 接口来执行查询操作。在构造函数中,我们创建了一个 SqlConnection 实例,它是 IDbConnection 接口的一个具体实现类。然后,在 GetCustomer 方法中,我们使用 connection 对象打开数据库连接,并使用 Dapper 的 QuerySingleOrDefault 方法执行了一个查询操作。

通过 IDbConnection 接口,我们可以使用不同的数据库连接实现类,如 SqlConnectionMySqlConnection 等,来连接和操作不同类型的数据库。这使得我们可以在不修改核心代码的情况下切换数据库引擎。


ORM (Object-Relational Mapping) 是一种编程技术,用于将关系数据库中的数据映射到面向对象编程语言中的对象。它简化了数据库操作的代码编写和维护,使开发人员能够以面向对象的方式处理数据。ORM 工具像 Dapper 提供了一组功能和约定,用于处理数据库和对象之间的映射关系,从而减少了手动编写数据库访问代码的工作量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL--->事务】

文章目录 [TOC](文章目录) 一、基本概念二、事务的操作1.设置全局事务隔离级别2.设置事务提交方式3.事务操作 三、事务隔离性1.隔离性概念2 .隔离级别设置 四、MVCC多版本控制2. read view 一、基本概念 事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑…

C语言--判断年月日是否合理

一.题目描述 比如输入2001&#xff0c;2&#xff0c;29&#xff0c;输出&#xff1a; 不合理 。因为平年的二月只有28天 比如输入2000&#xff0c;6&#xff0c;31&#xff0c;输出&#xff1a;不合理。因为6月是小月&#xff0c;只有30天。 二.思路分析 本题主要注意两个问…

轻量服务器是不是vps,和vps有什么区别

1.轻量型服务器的定义和特点 轻量型服务器是介于云服务器和共享型服务器之间的一种解决方案。它提供较为独立的资源分配&#xff0c;但规模较小&#xff0c;适用于中小型网站和应用程序。轻量型服务器的硬件资源来源于大型的公有云集群的虚拟化技术。轻量型服务器的性能和带宽…

强化学习--多维动作状态空间的设计

目录 一、离散动作二、连续动作1、例子12、知乎给出的示例2、github里面的代码 免责声明&#xff1a;以下代码部分来自网络&#xff0c;部分来自ChatGPT&#xff0c;部分来自个人的理解。如有其他观点&#xff0c;欢迎讨论&#xff01; 一、离散动作 注意&#xff1a;本文均以…

ERP、CRM、SRM、PLM、HRM、OA……都是啥意思

在天某微电子上班&#xff0c;经常会听说一些系统或平台名称&#xff0c;例如ERP、CRM、SRM、PLM、HRM、OA、FOL等。 这些系统&#xff0c;都是干啥用的呢&#xff1f; █ ERP&#xff08;企业资源计划&#xff09; 英文全称&#xff1a;Enterprise Resource Planning 定义…

如何使用SD-WAN提升物流供应链网络效率

案例背景 本次分享的物流供应链企业是一家国际性的大型企业&#xff0c;专注于提供全球范围内的物流和供应链解决方案。案例用户在不同国家和地区均设有多个分支机构和办公地点&#xff0c;以支持客户需求和业务运营。 在过去&#xff0c;该企业用户使用传统的MPLS网络来连接各…

OceanBase:04-单机在线转分布式部署

目录 1.当前部署情况 2.单Zone多OBServer模式 3.多Zone多OBServer模式 3.1 集群规划 3.2 安装OBServer程序 3.3 新增Zone 3.4 启动Zone 3.5 向Zone新增OBserver节点 3.6重复3.2~3.5新增其他Zone 4.扩充资源 OceanBase 数据库为单机分布式一体化架构&#xff0c;支持单…

ssh远程使用jupyter notebook

Jupyter配置 密码生成哈希值 jupyter lab password拷贝出哈希值 vi /root/.jupyter/jupyter_server_config.json生成配置文件 jupyter-lab --generate-config编辑配置文件 vi /root/.jupyter/jupyter_lab_config.py查找 /password 按n查找一下一个 c.ServerApp.password …

纯干货丨电脑监控软件有哪些(三款电脑监控软件大盘点)

电脑监控软件在日常生活和工作中的应用越来越广泛。这些软件可以帮助我们监控电脑的使用情况&#xff0c;保护电脑的安全&#xff0c;提高工作效率。本文将介绍一些高人气的电脑监控软件&#xff0c;并分享一些纯干货。 1、 域之盾软件----电脑监控系统 是一款功能强大的电脑监…

LeetCode:307. 区域和检索 - 数组可修改(树状数组 C++)

目录 307. 区域和检索 - 数组可修改 题目描述&#xff1a; 实现代码与解析&#xff1a; 树状数组&#xff1a; 原理思路&#xff1a; 307. 区域和检索 - 数组可修改 题目描述&#xff1a; 给你一个数组 nums &#xff0c;请你完成两类查询。 其中一类查询要求 更新 数组…

Linux输入设备应用编程(触摸屏获取坐标信息)

上一章学习了开发板外接键盘并获取键盘的的输入 Linux输入设备应用编程&#xff08;键盘&#xff0c;按键&#xff09;-CSDN博客 本章编写触摸屏应用程序&#xff0c;获取触摸屏的坐标信息并将其打印出来 目录 一 触摸屏数据分析&#xff08;触摸&#xff0c;点击&#xff…

采用connector-c++ 8.0操作数据库

1.下载最新的Connector https://dev.mysql.com/downloads/connector/cpp/&#xff0c;下载带debug的库。 解压缩到本地&#xff0c;本次使用的是带debug模式的connector库&#xff1a; 注&#xff1a;其中mysqlcppconn与mysqlcppconn8的区别是&#xff1a; 2.在cmakelist…

请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别

“请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别”。 屏幕前有多少同学在面试过程与遇到过类似问题&#xff0c; 可以在评论区留言&#xff1a;遇到过。 考察目的 对于 xxxx 技术的区别&#xff0c;在面试中是很常见的一个问题 一般情况下&#xff0c;面试官会通过这类…

SpringBoot监听器解析

监听器模式介绍 监听器模式的要素 事件监听器广播器触发机制 SpringBoot监听器实现 系统事件 事件发送顺序 监听器注册 监听器注册和初始化器注册流程类似 监听器触发机制 获取监听器列表核心流程: 通用触发条件: 自定义监听器实现 实现方式1 实现监听器接口: Order(1) …

[操作系统]进程和线程

目录 1.什么是进程 1.1进程控制块抽象 1.2 CPU 分配 —— 进程调度&#xff08;Process Scheduling&#xff09; 1.3内存分配 —— 内存管理&#xff08;Memory Manage&#xff09; 1.4进程间通信(Inter Process Communication) 2.线程 2.1概念 2.2为什么要有线程 2.3线…

论文阅读 Forecasting at Scale (二)

最近在看时间序列的文章&#xff0c;回顾下经典 论文地址 项目地址 Forecasting at Scale 3.2、季节性 3.3、假日和活动事件3.4、模型拟合3.5、分析师参与的循环建模4、自动化预测评估4.1、使用基线预测4.2、建模预测准确性4.3、模拟历史预测4.4、识别大的预测误差 5、结论6、致…

【Python】重磅!这本30w人都在看的Python数据分析畅销书更新了!

Python 语言极具吸引力。自从 1991 年诞生以来&#xff0c;Python 如今已经成为最受欢迎的解释型编程语言。 【文末送书】今天推荐一本Python领域优质数据分析书籍&#xff0c;这本30w人都在看的书&#xff0c;值得入手。 目录 作译者简介主要变动导读视频购书链接文末送书 pan…

【计算机方向】通信、算法、自动化、机器人、电子电气、计算机工程、控制工程、计算机视觉~~~~~合集!!!

◆本文为大家梳理了近期可投的EI国际会议&#xff0c;涵盖计算机各个学科方向&#xff0c;均可EI检索 本期EI会议汇总合集涵盖领域&#xff1a;计算机视觉、物联网、算法、通信、智能技术、人工智能、人机交互、机器人、电子电气等众多领域&#xff01; 本期所推荐的EI会议有…

ros2不同机器通讯时IP设置

看到这就是不同机器的IP地址&#xff0c;为了避免在路由器为不同的机器使用DHCP分配到上面的地址&#xff0c;可以设置DHCP分配的范围&#xff1a;&#xff08;我的路由器是如下设置的&#xff0c;一般路由器型号都不一样&#xff0c;自己找一下&#xff09; 防火墙设置-----&…

Leetcode—13.罗马数字转整数【简单】

2023每日刷题&#xff08;三十七&#xff09; Leetcode—13.罗马数字转整数 算法思想 当前位置的元素比下个位置的元素小&#xff0c;就减去当前值&#xff0c;否则加上当前值 实现代码 int getValue(char c) {switch(c) {case I:return 1;case V:return 5;case X:return 1…