MyBatis整合SpringBoot終極指南

以下是一份系統化的 ?MyBatis 整合 Spring Boot 學習筆記,結合官方文檔與最佳實踐整理,涵蓋配置、核心功能、實戰示例及常見問題解決。


一、整合基礎與依賴配置

1. ?核心依賴?

pom.xml 中添加:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.2</version> <!-- 推薦 ≥2.3.x -->
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
  • ?作用?:自動引入 MyBatis 核心庫、Spring JDBC、HikariCP 連接池。
2. ?數據源配置?

application.yml 中配置:

spring:datasource:url: jdbc:mysql://localhost:3306/test?serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/**/*.xml  # XML 映射文件路徑type-aliases-package: com.example.entity     # 實體類別名包configuration:map-underscore-to-camel-case: true         # 開啟駝峰命名映射

??:無需手動配置 SqlSessionFactory,starter 自動創建。


二、核心組件與數據操作

1. ?實體類與 Mapper 接口?
  • ?實體類?(使用 Lombok 簡化):

    @Data
    public class User {private Long id;private String name;private Integer age;
    }
  • ?Mapper 接口?(兩種注冊方式):

    // 方式1:單接口添加 @Mapper
    @Mapper
    public interface UserMapper {User selectById(Long id);
    }// 方式2:啟動類批量掃描
    @SpringBootApplication
    @MapperScan("com.example.mapper")  // 掃描包下所有接口
    public class Application { ... }
    ?注冊方式??優點??缺點?
    @Mapper無需全局掃描配置每個接口需單獨注解
    @MapperScan批量注冊,避免警告需指定包路徑
2. ?SQL 映射方式?
  • ?注解方式?(簡單查詢):

    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);
  • ?XML 方式?(復雜 SQL):

    <!-- resources/mapper/UserMapper.xml -->
    <mapper namespace="com.example.mapper.UserMapper"><select id="selectByName" resultType="User">SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')</select>
    </mapper>

三、高級特性與優化

1. ?事務管理?
  • 直接使用 Spring 的 @Transactional
    @Service
    public class UserService {@Autowiredprivate UserMapper userMapper;@Transactionalpublic void updateUser(User user) {userMapper.update(user);}
    }

    默認使用 DataSourceTransactionManager

2. ?類型處理器(TypeHandler)??

處理特殊類型轉換(如枚舉?數據庫字段):

@MappedTypes(SexEnum.class)
public class SexTypeHandler extends BaseTypeHandler<SexEnum> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, SexEnum sex, JdbcType jdbcType) {ps.setInt(i, sex.getId());  // 將枚舉值存儲為整數}// 其他方法實現...
}

在配置中啟用:

mybatis:type-handlers-package: com.example.handler  # 類型處理器包路徑
3. ?二級緩存?
  • ?啟用步驟?:
    1. 全局配置開啟緩存:
    mybatis:configuration:cache-enabled: true
    1. 在 Mapper XML 中添加 <cache/> 標簽:
    <mapper namespace="com.example.mapper.UserMapper"><cache/>
    </mapper>

四、常見問題與解決

?問題??原因??解決方案?
Mapper 接口注入失敗未掃描到接口添加 @MapperScan@Mapper
SQL 參數 #{} 報錯參數名未匹配使用 @Param("name") 明確命名
時區錯誤(ServerTimezone)MySQL 驅動版本問題URL 添加 ?serverTimezone=UTC
駝峰命名未生效配置未開啟設置 map-underscore-to-camel-case: true

五、項目結構示例

src/
├── main/
│   ├── java/
│   │   ├── com.example.Application.java     # 啟動類
│   │   ├── entity/User.java                 # 實體類
│   │   ├── mapper/UserMapper.java           # Mapper 接口
│   │   └── service/UserService.java         # 業務層
│   └── resources/
│       ├── mapper/UserMapper.xml            # XML 映射文件
│       └── application.yml                  # 配置文件

六、擴展:多數據源配置

@Configuration
@MapperScan(basePackages = "com.example.primary", sqlSessionFactoryRef = "sqlSessionFactory1")
public class PrimaryDataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory sqlSessionFactory1(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean factory = new SqlSessionFactoryBean();factory.setDataSource(dataSource);return factory.getObject();}
}

需為每個數據源獨立配置 SqlSessionFactory 和事務管理器。


?參考資料?

  1. MyBatis 二級緩存與事務整合
  2. Spring Boot 多數據源實戰

完整代碼示例可參考 。

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

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

相關文章

企業微信ipad協議接口解決方案最新功能概覽

支持最新版本企業微信&#xff0c;安全穩定0封號免費試用&#xff0c;技術支持&#xff1a;string wechat"Mrzhu0107"企微ipad協議接口最新功能升級如下&#xff1a;【初始化】初始化企業微信&#xff0c;設置消息回調地址&#xff0c;獲取運行中的實例&#xff0c;根…

ansible 批量 scp 和 load 鏡像

1、save 鏡像腳本 在本地保存鏡像到 ansible 代碼目錄的腳本。 1.1、使用說明: 保存單個鏡像 save -i gcr.io/cadvisor/cadvisor:v0.52.1保存某個 namespace 下的所有鏡像 save1.2、腳本內容 cat /usr/local/bin/save #!/bin/bash #set -e # 分隔符 str="-"# …

【C# in .NET】20. 探秘靜態類:抽象與密封的結合體

探秘靜態類:抽象與密封的結合體 一、靜態類的底層本質:抽象與密封的結合體 靜態類作為 C# 中特殊的類型形式,其底層實現融合了抽象類與密封類的特性,形成了不可實例化、不可繼承的類型約束。 1. IL 層面的靜態類標識 定義一個簡單的靜態類: public static class Stri…

【Vue3】ECharts圖表案例

官方參考&#xff1a;Examples - Apache ECharts 1、創建工程 npm create vitelatest 或 npm init vuelatest 設置如下 2、下載依賴集運行項目 cd vue-echarts-demo npm install npm install echarts npm run dev 3、編寫核心代碼 創建src\components\BarView.vue文件…

二分查找----2.搜索二維矩陣

題目鏈接 /** 方案一: 每行都是遞增的,對每行進行二分,逐行查找;效率不高,每次搜索只能控制列無法兼顧到行,行被固定存在不必要的搜索 方案二: 從右上或左下頂點出發,以右上為例,向左迭代列減小,向下迭代行增大;效率更高避免重復搜索 */ class Solution {/**方案一: 每行都是…

2025.7.23

flen&#xff08;&#xff09;這個函數計算到的文件大小為0&#xff0c;明天解決 原因是路徑錯誤&#xff0c;寫成了CONFIG_ROOT_PATH"/music/test2.mp3,但是也沒報錯&#xff0c;打開文件也成功&#xff0c;所以就沒有懷疑到路徑方面來

大致自定義文件I/O庫函數的實現詳解(了解即可)

目錄 一、mystdio.h 代碼思路分析 二、mystdio.c 1. 輔助函數 BuyFile 2. 文件打開函數 MyFopen 3. 文件關閉函數 MyFclose 4. 數據寫入函數 MyFwrite 1、memcpy(file->outbuffer file->bufferlen, str, len); 2、按位與&#xff08;&&#xff09;運算的作…

Zipformer

Zipformer首先&#xff0c;Conv-Embed 將輸入的 100Hz 的聲學特征下采樣為 50 Hz 的特征序列&#xff1b;然后&#xff0c;由 6 個連續的 encoder stack 分別在 50Hz、25Hz、12.5Hz、6.25Hz、12.5Hz 和 25Hz 的采樣率下進行時域建模。除了第一個 stack 外&#xff0c;其他的 st…

SpringMVC快速入門之請求與響應

SpringMVC快速入門之請求與響應一、請求處理&#xff1a;獲取請求參數1.1 普通參數獲取&#xff08;RequestParam&#xff09;1.1.1 基礎用法1.1.2 可選參數與默認值1.2 路徑變量&#xff08;PathVariable&#xff09;1.3 表單數據綁定到對象1.3.1 定義實體類1.3.2 綁定對象參數…

【Mysql】 Mysql zip解壓版 Win11 安裝備忘

1. 官網 MySQL :: MySQL Community Downloads 選擇 MySQL Community Server 選擇Archives 選擇 8.0版本 MySQL :: Download MySQL Community Server (Archived Versions) 1. 普通版本&#xff08;推薦&#xff09; 名稱&#xff1a;Windows (x86, 64-bit), ZIP Archive 文件…

Web3面試題

1.在使用 Ethers.js 對接 MetaMask 錢包時&#xff0c;如何檢測用戶賬戶切換的情況&#xff1f;請簡述實現思路。 答案&#xff1a;可通過監聽accountsChanged事件來檢測。當用戶切換賬戶時&#xff0c;MetaMask 會觸發該事件&#xff0c;在事件回調函數中可獲取新的賬戶地址&…

uni-app動態獲取屏幕邊界到安全區域距離的完整教程

目錄 一、什么是安全區域&#xff1f; 二、獲取安全區域距離的核心方法 三、JavaScript動態獲取安全區域距離 1. 核心API 2. 完整代碼示例 3. 關鍵點說明 四、CSS環境變量適配安全區域 1. 使用 env() 和 constant() 3. 注意事項 五、不同平臺的適配策略 1. H5 端 2…

ZKmall開源商城微服務架構實戰:Java 商城系統的模塊化拆分與通信之道

在電商業務高速增長的今天&#xff0c;傳統單體商城系統越來越力不從心 —— 代碼堆成一團、改一點牽一片、想加功能得大動干戈&#xff0c;根本扛不住高并發、多場景的業務需求。微服務架構卻能破這個局&#xff1a;把系統拆成一個個能獨立部署的小服務&#xff0c;每個服務專…

ROS 與 Ubuntu 版本的對應關系

ROS 作為一套用于構建機器人應用的開源框架&#xff0c;其開發和運行高度依賴 Ubuntu 等 Linux 發行版&#xff0c;尤其是 Ubuntu 因其廣泛的兼容性和社區支持&#xff0c;成為了 ROS 最主流的運行平臺。 一、ROS 與 Ubuntu 版本的對應關系&#xff08;截至 2025 年&#xff0c…

GPT-4o mini TTS:領先的文本轉語音技術

什么是 GPT-4o mini TTS&#xff1f; GPT-4o mini TTS 是 OpenAI 推出的全新一代文本轉語音&#xff08;TTS&#xff09;技術&#xff0c;能夠以自然、流暢的方式將普通文本轉換為語音。依托先進的神經網絡架構&#xff0c;GPT-4o mini TTS 在語音合成中避免了傳統 TTS 的生硬…

Git下載全攻略

目標讀者初學者或有經驗的開發者不同操作系統用戶&#xff08;Windows、macOS、Linux&#xff09;下載前的準備確認系統版本和位數&#xff08;32-bit/64-bit&#xff09;檢查網絡環境是否穩定確保有足夠的磁盤空間Windows系統下載Git訪問Git官方網站&#xff08;https://git-s…

ADAS域控軟件架構-網絡管理狀態與喚醒機制

1. 狀態介紹: Sleep Mode:總線睡眠模式,控制器不發送應用報文和網絡管理報文。 Pre-Sleep Mode:準備總線睡眠模式,控制器不發送應用報文和網絡管理報文。 Ready Sleep Mode:就緒睡眠模式,系統發送應用報文但是不發送網絡管理報文。 Normal Operation mode:正常工作模式…

pytest簡單使用和生成測試報告

目錄 1. 基本使用 1--安裝 2--pytest書寫規則 3--為pycharm設置 以 pytest的方式運行 4--setup和teardown 5--setup_class和teardown 2. pytest生成測試報告 基本使用 安裝 pytest文檔地址 pytest documentation pip install pytest點擊pycharm左邊的控制臺按鈕 輸入pip inst…

Spring Boot 第一天知識匯總

一、Spring Boot 是什么&#xff1f;簡單說&#xff0c;Spring Boot 是簡化 Spring 應用開發的框架 —— 它整合了整個 Spring 技術棧&#xff0c;提供了 “一站式” J2EE 開發解決方案。核心優點&#xff1a;快速創建獨立運行的 Spring 項目&#xff0c;無需繁瑣配置&#xff…

MySql主從部署

MySql主從部署 1、操作環境 硬件環境&#xff1a;香橙派5 aarch64架構 軟件環境&#xff1a;Ubuntu 22.04.3 LTS 軟件版本&#xff1a;mysql-8.0.42 操作方式&#xff1a;mysql_1,mysql_2容器 主節點&#xff1a;mysql_1 啟動命令&#xff1a;docker run --name mysql_master \…