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.pswp.cn/news/160814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160814.shtml
英文地址,請注明出處:http://en.pswp.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…