Mybatis的簡單介紹

文章目錄

        • MyBatis 簡介
    • 1. MyBatis 核心特點
    • 2. MyBatis 核心組件
    • 3. MyBatis 基本使用示例
      • (1) 依賴引入(Maven)
      • (2) 定義 Mapper 接口
      • (3) 定義實體類
      • (4) 在 Service 層調用
    • 4. MyBatis 與 JPA/Hibernate 對比

MyBatis 簡介

MyBatis 是一款優秀的 持久層框架(ORM 框架),它支持 定制化 SQL、存儲過程以及高級映射,避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集的過程。MyBatis 可以使用簡單的 XML 或注解 來配置和映射數據庫操作,使得 Java 開發者可以更專注于 SQL 本身,而不需要過多處理 JDBC 的繁瑣操作。


1. MyBatis 核心特點

? 輕量級:相比 Hibernate,MyBatis 更加輕量,不強制使用特定的對象關系映射(ORM)方式。
? 靈活的 SQL 控制:開發者可以編寫原生 SQL,優化復雜查詢。
? 支持動態 SQL:提供 <if>, <choose>, <foreach> 等標簽,便于構建動態查詢。
? 易于集成:可以與 Spring、Spring Boot 無縫集成(如 mybatis-spring-boot-starter)。
? 緩存機制:支持一級緩存(SqlSession 級別)和二級緩存(Mapper 級別),提高查詢性能。


2. MyBatis 核心組件

組件說明
SqlSessionFactory用于創建 SqlSession,是 MyBatis 的核心對象。
SqlSession代表一次數據庫會話,用于執行 SQL 并獲取映射結果。
Mapper 接口定義數據庫操作的方法,MyBatis 會動態生成實現類。
Mapper XML存放 SQL 映射文件,定義 SQL 語句和結果映射規則。
Configuration存儲 MyBatis 的所有配置信息(數據源、緩存、映射等)。

3. MyBatis 基本使用示例

(1) 依賴引入(Maven)

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

(如果使用 Spring Boot 3.x,推薦 3.0.x 版本;Spring Boot 2.x 可用 2.3.x

(2) 定義 Mapper 接口

@Mapper // Spring Boot 會自動掃描并注冊該接口
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(Long id);@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

(也可以用 XML 方式定義 SQL)

(3) 定義實體類

public class User {private Long id;private String name;private String email;// getters & setters
}

(4) 在 Service 層調用

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.getUserById(id);}public void addUser(User user) {userMapper.insertUser(user);}
}

4. MyBatis 與 JPA/Hibernate 對比

特性MyBatisJPA/Hibernate
SQL 控制開發者完全控制 SQL自動生成 SQL,也可自定義
靈活性適合復雜查詢適合標準 CRUD
學習曲線較簡單較復雜(需掌握 JPA 規范)
性能優化手動優化 SQL自動優化,但可能不夠靈活
適用場景需要精細控制 SQL 的項目快速開發、標準化的項目

過分簡單了,后面會補充的。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76623.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Studio 在 Windows 上的完整安裝與使用指南

Android Studio 在 Windows 上的完整安裝與使用指南—目錄 一、Android Studio 簡介二、下載與安裝1. 下載 Android Studio2. 安裝前的依賴準備3. 安裝步驟 三、基礎使用指南1. 首次啟動配置2. 創建第一個項目3. 運行應用4. 核心功能 四、進階功能配置1. 配置 SDK 和工具2. 自定…

WPF 綁定方式舉例

WPF 綁定方式舉例 一、如果ItemsControl 控件的ItemsSource要綁定到List類型&#xff0c;可以如下&#xff1a; List<string> Names new List<string>(); Names.Add("aaa"); Names.Add("bbb");<ItemsControl ItemsSource"{Binding …

LangSmith 設置指南

什么是 LangSmith&#xff1f; LangSmith 是 LangChain 團隊開發的一個統一開發者平臺&#xff0c;用于構建、測試、評估和監控基于大型語言模型&#xff08;LLM&#xff09;的應用程序。它提供了一套工具&#xff0c;幫助開發者更好地理解、調試和改進他們的 LLM 應用。 注冊…

手撕TCP內網穿透及配置樹莓派

注意&#xff1a; 本文內容于 2025-04-13 15:09:48 創建&#xff0c;可能不會在此平臺上進行更新。如果您希望查看最新版本或更多相關內容&#xff0c;請訪問原文地址&#xff1a;手撕TCP內網穿透及配置樹莓派。感謝您的關注與支持&#xff01; 之前入手了樹莓派5&#xff0c;…

Java從入門到“放棄”(精通)之旅——程序邏輯控制④

Java從入門到“放棄”&#xff08;精通&#xff09;之旅&#x1f680;&#xff1a;程序邏輯的完美理解 一、開篇&#xff1a;程序員的"人生選擇" 曾經的我&#xff0c;生活就像一段順序執行的代碼&#xff1a; System.out.println("早上8:00起床"); Syste…

學習筆記九——Rust所有權機制

&#x1f980; Rust 所有權機制 &#x1f4da; 目錄 什么是值類型和引用類型&#xff1f;值語義和引用語義&#xff1f;什么是所有權&#xff1f;為什么 Rust 需要它&#xff1f;所有權的三大原則&#xff08;修正版&#xff09;移動語義 vs 復制語義&#xff1a;變量賦值到底…

Cocos Creator Shader入門實戰(八):Shader實現圓形、橢圓、菱形等頭像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鶴九日&#xff01; 回顧 Shader的學習是一條漫長的道路。 理論知識的枯燥無味&#xff0c;讓很多人選擇了放棄。然而不得不說&#xff1a;任何新知識、新領域的學習&#xff0c;本身面臨的都是問題&#xff01; 互聯網和AI給了我…

深入理解計算機操作系統(持續更新中...)

文章目錄 一、計算機系統漫游1.1信息就是位上下文 一、計算機系統漫游 1.1信息就是位上下文 源程序實際上就是一個由值0和1組成的位&#xff08;又稱為比特&#xff09;&#xff0c;八個位被組織成一組&#xff0c;稱為字節。每個字節表示程序中的某些文本字符 大部分現代計…

YOLO V8的??Anchor-Free??、??解耦頭(Decoupled Head)、損失函數定義(含??Varifocal Loss)

YOLOv8 的 ??Anchor-Free?? 設計摒棄了傳統 YOLO 系列中依賴預定義錨框&#xff08;Anchor Boxes&#xff09;的機制&#xff0c;轉而直接預測目標的中心點和邊界框尺寸。這種設計簡化了模型結構&#xff0c;降低了超參數調優的復雜度提升了檢測速度和精度。以下是其核心實…

QuarkPi-CA2 RK3588S卡片電腦:6.0Tops NPU+8K視頻編解碼+接口豐富,高性能嵌入式開發!

QuarkPi-CA2 RK3588S卡片電腦&#xff1a;6.0Tops NPU8K視頻編解碼接口豐富&#xff0c;高性能嵌入式開發&#xff01; 芯片框架 視頻介紹 https://www.bilibili.com/video/BV1btdbYkEjY 開發板介紹 核心升級&#xff0c;產品炸裂 QuarkPi-CA2卡片電腦搭載瑞芯微RK3588S芯片…

【響應式編程】Reactor 常用操作符與使用指南

文章目錄 一、創建操作符1. just —— 創建包含指定元素的流2. fromIterable —— 從集合創建 Flux3. empty —— 創建空的 Flux 或 Mono4. fromArray —— 從數組創建 Flux5. fromStream —— 從 Java 8 Stream 創建 Flux6. create —— 使用 FluxSink 手動發射元素7. generat…

從靜態綁定驅動模型到現代設備模型 —— 一次驅動架構的進化之旅

&#x1f50d; B站相應的視屏教程&#xff1a; &#x1f4cc; 內核&#xff1a;博文視頻 - 從靜態綁定驅動模型到現代設備模型 在 Linux 內核的發展歷程中&#xff0c;設備驅動結構經歷了從"硬編碼 手動注冊"的早期實現方式&#xff0c;到"設備模型統一管理&qu…

Embedding質量評估、空間塌縮、 Alignment Uniformity

Embedding質量的評估和空間塌縮的解決是自然語言處理&#xff08;NLP&#xff09;和推薦系統領域的關鍵問題。以下是綜合多篇研究的總結&#xff1a; 一、Embedding質量評估方法 基準測試與任務指標 MTEB/C-MTEB&#xff1a;使用多語言或中文的基準測試集&#xff08;如58個數據…

批量給dwg顯示略縮圖_c#插件實現(com)

如果&#xff0c;cad文件無略縮圖&#xff1a; AutoCAD2021版本以上&#xff0c;命令行輸入"netload "加載此dll插件&#xff0c;然后輸入 “lst”&#xff0c;選擇文件夾&#xff0c;即可一鍵實現給dwg增加略縮圖。 效果如下&#xff1a; 附部分代碼&#xff1a; …

嬰幼兒托育服務與管理實訓室:托育未來的基石

在社會對嬰幼兒托育服務的重視程度不斷加深的當下&#xff0c;專業托育人才的需求急劇增長。嬰幼兒托育服務與管理專業作為培育這類人才的關鍵途徑&#xff0c;要求學生熟練掌握嬰幼兒身心發展、飲食營養以及衛生保健等基礎知識&#xff0c;同時具備全面的照護與管理能力。要實…

(自用)若依生成左樹右表

第一步&#xff1a; 在數據庫創建樹表和單表&#xff1a; SQL命令&#xff1a; 商品表 CREATE TABLE products (product_id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255) , price DECIMAL(10, 2) , stock INT NOT NULL, category_id INT NOT NULL); 商品分類…

Linux:DNS服務配置(課堂實驗總結)

遇到的問題&#xff0c;都有解決方案&#xff0c;希望我的博客能為你提供一點幫助。 操作系統&#xff1a;rocky Linux 9.5 ??一、配置DNS服務器的核心步驟?? 步驟 1&#xff1a;安裝 BIND 軟件?? ??檢查是否安裝??&#xff1a; rpm -qa | grep "^bind"…

搭建一個Spring Boot聚合項目

1. 創建父項目 打開IntelliJ IDEA&#xff0c;選擇 New Project。 在創建向導中選擇 Maven&#xff0c;確保選中 Create from archetype&#xff0c;選擇 org.apache.maven.archetypes:maven-archetype-quickstart。 填寫項目信息&#xff1a; GroupId&#xff1a;com.exampl…

若依前后端分離版運行教程、打包教程、部署教程

后端打包教程 注意&#xff1a;需要先運行redis 2、前端運行教程 2.1安裝依賴 2.2運行 打開瀏覽器查看,地址&#xff1a;http://localhost:80 3、前端打包教程 3.1打包 3.2運行打包好的文件&#xff0c;先找到打包好的文件 這是nginx的文件結構 將打包好的文件放到html目錄下…

SpringAi 會話記憶功能

在使用chatGPT&#xff0c;豆包等產品后&#xff0c;就會發現他們的會話有“記憶”功能。 那么我們用API接口的話&#xff0c;這個是怎么實現的呢&#xff1f; 屬于比較粗暴的方式&#xff0c;把之前的內容與新的提示詞一起再次發給大模型。讓我們看到他們有記憶功能。 下面介紹…