SpringBoot整合MyBatis完整實踐指南

在Java企業級應用開發中,SpringBoot和MyBatis的組合已經成為主流的技術選型方案之一。本文將詳細介紹如何從零開始搭建一個基于SpringBoot和MyBatis的項目,包括環境配置、數據庫設計、實體類創建、Mapper接口編寫以及實際應用等完整流程。

一、環境準備

1.1 軟件安裝

首先需要安裝以下軟件:

  • MySQL 5.7:關系型數據庫

  • Navicat:數據庫可視化工具(可選但推薦)

安裝MySQL時需要注意配置好root用戶的密碼,并確保服務正常啟動。

1.2 數據庫創建

我們創建一個名為black20250531的數據庫,并建立用戶表:

sql

復制

下載

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '頭像',`nick` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '昵稱',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用戶名,登錄用戶名不能重復',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密碼',`role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色',`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '電話',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '郵箱驗證碼',`recharge` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '充值記錄',`consume` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '消耗',`balance` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '余額',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `用戶登錄名稱`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 110 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;

表設計特點:

  • 使用utf8mb4字符集,支持完整的Unicode字符(包括emoji)

  • 主鍵id自增

  • 用戶名name字段設置唯一索引

  • 包含基本的用戶信息和財務相關字段

二、SpringBoot項目配置

2.1 引入MyBatis依賴

在pom.xml中添加MyBatis Starter依賴:

xml

復制

下載

運行

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

2.2 數據庫連接配置

在application.properties中配置數據庫連接:

properties

復制

下載

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mysql host and user password
spring.datasource.url=jdbc:mysql://${host}:3306/black20250531?serverTimezone=GMT%2b8&allowMultiQueries=true&useAffectedRows=true
spring.datasource.username=root
spring.datasource.password=xxx
mybatis.mapper-locations=classpath:mapper/*.xml

配置說明:

  • 使用MySQL Connector/J驅動

  • 設置時區為GMT+8(中國標準時間)

  • 允許批量查詢和使用受影響的行數

  • 指定Mapper XML文件的位置

三、實體類與Mapper設計

3.1 用戶實體類

java

復制

下載

package com.black.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.black.service.PageService;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.util.Date;
import java.util.List;@Data // 直接帶get與set
public class User implements PageService {@TableId(type = IdType.AUTO)private Integer id;private String avatar;private String nick;private String name;private String password;private String code;private String phone;private String recharge = "0";private String consume = "0";private String balance; // 余額@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createTime;private String role; // 角色@TableField(exist = false)private String newPassword;// 扣費成功標志@TableField(exist = false)private Boolean reduceFlag;//分頁屬性@TableField(exist = false)private Integer currentPage;@TableField(exist = false)private Integer pageSize;@TableField(exist = false)private Integer start;@TableField(exist = false)private Integer end;//批量刪除id@TableField(exist = false)private List<Integer> removeIdList;@TableField(exist = false)private String token; // 會話憑證@TableField(exist = false)private List<Menu> menuList; // 用戶擁有的菜單private String ability;
}

實體類特點:

  • 使用Lombok的@Data注解簡化代碼

  • 使用MyBatis Plus的@TableId指定自增主鍵

  • @TableField(exist = false)標記非數據庫字段

  • @JsonFormat格式化日期輸出

3.2 Mapper接口

java

復制

下載

package com.black.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.black.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper extends BaseMapper<User> { // 繼承BaseMapper即擁有了CRUD基本方法
}

3.3 MyBatis配置類

java

復制

下載

package com.black.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.black.mapper")
public class MybatisPlus {@Beanpublic MybatisPlusInterceptor buildMybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mybatisPlusInterceptor;}
}

配置說明:

  • @MapperScan指定Mapper接口掃描路徑

  • 配置MyBatis Plus分頁插件

四、實際應用示例

在Controller中使用Mapper進行數據庫操作:

java

復制

下載

@RestController
@RequestMapping("/big")
public class BigController {@ResourceUserMapper userMapper;@PostMapping("/checkUser")public Res checkUser(@RequestBody User user) {QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();userQueryWrapper.eq(StringUtils.isNotBlank(user.getName()), "name", user.getName());User existUser = userMapper.selectOne(userQueryWrapper);if (existUser != null) {return Res.error("用戶名已存在");}return Res.success();}
}

代碼解析:

  1. 使用@Resource注入UserMapper

  2. 創建QueryWrapper構建查詢條件

  3. 調用selectOne方法查詢單個用戶

  4. 根據查詢結果返回相應信息

五、MyBatis Plus的優勢

  1. 簡化CRUD操作:繼承BaseMapper即獲得基本CRUD方法

  2. 強大的條件構造器:通過QueryWrapper可以方便地構建復雜查詢條件

  3. 分頁插件:內置分頁功能,簡化分頁查詢實現

  4. 自動填充:支持字段自動填充(如創建時間、更新時間等)

  5. 樂觀鎖:內置樂觀鎖實現

六、常見問題解決

  1. 數據庫連接失敗

    • 檢查MySQL服務是否啟動

    • 檢查連接URL、用戶名和密碼是否正確

    • 檢查數據庫驅動版本是否匹配

  2. 表字段與實體類屬性映射問題

    • 確保數據庫字段名與實體類屬性名一致(或使用@TableField指定)

    • 檢查是否配置了正確的駝峰命名轉換

  3. 分頁不生效

    • 確保配置了分頁插件

    • 檢查是否傳入了正確的Page參數

七、總結

本文詳細介紹了SpringBoot整合MyBatis的完整流程,從環境準備到實際應用,涵蓋了數據庫設計、實體類創建、Mapper接口編寫以及基本CRUD操作。MyBatis Plus作為MyBatis的增強工具,可以顯著提高開發效率,減少樣板代碼的編寫。

在實際項目中,還可以進一步探索:

  • MyBatis Plus的自動填充功能

  • 多數據源配置

  • 復雜的動態SQL構建

  • 二級緩存配置等高級特性

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

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

相關文章

【Rust 輕松構建輕量級多端桌面應用】

使用 Tauri 框架構建跨平臺應用 Tauri 是一個基于 Rust 的輕量級框架&#xff0c;可替代 Electron&#xff0c;用于構建高性能、低資源占用的桌面應用。其核心優勢在于利用系統原生 WebView 而非捆綁 Chromium&#xff0c;顯著減小應用體積。 安裝 Tauri 需要先配置 Rust 環境…

【Linux】shell腳本的常用命令

目錄 簡介 一.設置主機名稱 1.1通過文件修改 1.2通過命令修改 二.網絡管理命令nmcli 2.1查看網卡 2.2設置網卡 三.簡單處理字符 3.1seq打印連續字符 3.2printf,echo打印字符 3.3sort排序 3.4uniq冗余處理 3.5cut對字符的截取 四.xargs輸入轉參 簡介 以下命令都是…

解決訪問網站提示“405 很抱歉,由于您訪問的URL有可能對網站造成安全威脅,您的訪問被阻斷”問題

一、問題描述 本來前幾天都可以正常訪問的網站&#xff0c;但是今天當我們訪問網站的時候會顯示“405 很抱歉&#xff0c;由于您訪問的URL有可能對網站造成安全威脅&#xff0c;您的訪問被阻斷。您的請求ID是&#xff1a;XXXX”&#xff0c;而不能正常的訪問網站&#xff0c;如…

頁面輸入數據的表格字段(如 Web 表單或表格控件)與后臺數據庫進行交互時常用的兩種方式

“從頁面輸入數據的表格字段(如 Web 表單或表格控件)在與后臺數據庫進行交互時,常用的有兩種方式:” ?? 兩種方式(操作調用數據庫、綁定數據) ?? 方式1:前端代碼提交數據到后端,再由后端調用數據庫 ?? 原理和邏輯: 用戶在頁面上(比如輸入表單、表格)輸入數據…

非阻塞套接字編程詳解

阻塞與非阻塞套接字對比 傳統阻塞式套接字編程使用ServerSocket和Socket類時,關鍵方法如connect()、accept()、read()、write()都會導致調用線程阻塞,直到操作完成。這種模式存在兩個主要問題: 客戶端線程在等待數據時會被完全阻塞服務端需要為每個客戶端連接創建獨立線程,…

電子電路:初步認識CMOS技術

CMOS&#xff08;Complementary Metal-Oxide-Semiconductor&#xff0c;互補金屬氧化物半導體&#xff09;是一種半導體技術&#xff0c;廣泛應用于集成電路&#xff08;IC&#xff09;的設計和制造中。以下是關于CMOS的詳細說明&#xff1a; 1. 基本概念 技術原理&#xff1a…

【11408學習記錄】考研英語寫作提分秘籍:2013真題邀請信精講+萬能模板套用技巧

邀請信 英語寫作2013年考研英語&#xff08;一&#xff09;真題小作文題目分析寫作思路第一段&#xff1a;第二段&#xff1a;錦囊妙句1&#xff1a;錦囊妙句2&#xff1a;錦囊妙句3&#xff1a;錦囊妙句5&#xff1a;錦囊妙句6&#xff1a;錦囊妙句9&#xff1a;錦囊妙句14&am…

Java 注解與反射(超詳細!!!)

Java 注解與反射&#xff08;超詳細&#xff01;&#xff01;&#xff01;&#xff09; 文章目錄 Java 注解與反射&#xff08;超詳細&#xff01;&#xff01;&#xff01;&#xff09;1.注解1.1內置注解1.1.1 SuppressWarnings注解用法 1.2 元注解1.3自定義注解 2.反射2.1 反…

用nz-tabel寫一個合并表格

用nz-tabel寫一個合并表格 <nz-table #basicTable [nzData]"tableSearchStatus.dataList" nzBordered><thead><tr><th>班級</th><th>姓名</th><th>年齡</th><th>電話</th></tr></thead&…

第6章 放大電路的反饋

本章基本要求 會判&#xff1a;判斷電路中有無反饋及反饋的性質 會算&#xff1a;估算深度負反饋條件下的放大倍數 會引&#xff1a;根據需求引入合適的反饋 會判振消振&#xff1a;判斷電路是否能穩定工作&#xff0c;會消除自激振蕩。 6.1 反饋的概念及判斷 一、反饋的…

ansible template 文件中如果包含{{}} 等非ansible 變量處理

在 Ansible 模板中&#xff0c;如果你的 Python 腳本里有大量 {}、f""、或者其他 Jinja 會誤解析的語法&#xff0c;就需要用 {% raw %}…{% endraw %} 把它們包起來&#xff0c;只在需要替換變量的那一行單獨“放行”。例如&#xff1a; {% raw %} #!/usr/bin/env …

STM32G4 電機外設篇(一) GPIO+UART

目錄 一、STM32G4 電機外設篇&#xff08;一&#xff09; GPIOUART1 GPIO1.1 STM32CUBEMX 配置以及Keil代碼1.2 代碼和實驗現象 2 UART2.1 STM32CUBEMX 配置以及Keil代碼2.2 代碼和實驗現象 附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^) 一、STM32G4 電機外設篇&#xff0…

Kotlin 中集合遍歷有哪幾種方式?

1 for-in 循環&#xff08;最常用&#xff09; val list listOf("A", "B", "C") for (item in list) {print("$item ") }// A B C 2 forEach 高階函數 val list listOf("A", "B", "C") list.forEac…

尚硅谷redis7 99 springboot整合redis之連接集群

6381宕機&#xff0c;手動shutdown后在redis中&#xff0c;634自動上位變成master結點。 但是在springboot中卻沒有動態感知道redisCluster的最新集群消息&#xff0c;所以找不到我們要檢索的數據。原因是&#xff1a;SpringBoot 2.X版本,Redis默認的連接池采用 Lettuce&#…

AI 的早期萌芽?用 Swift 演繹約翰·康威的「生命游戲」

文章目錄 摘要描述題解答案題解代碼分析示例測試及結果時間復雜度空間復雜度總結 摘要 你有沒有想過&#xff0c;能不能通過簡單的規則模擬出生與死亡&#xff1f;「生命游戲」正是這樣一種充滿魅力的數學模擬系統。這篇文章我們來聊聊它的規則到底有多神奇&#xff0c;并用 S…

web ui自動化工具playwright

playwright是微軟開源的一款web ui自動化工具&#xff0c;該工具有很多亮點&#xff0c;解決以前困擾web UI自動化測試的很多難點。這篇博客將介紹playwright主要特點。 playwright支持錄制減少了編寫成本 如果要使用playwright的錄制功能&#xff0c;有兩種途徑&#xff0c;途…

移動安全Android——客戶端靜態安全

一、反編譯保護 測試工具 Jadx GitHub - skylot/jadx: Dex to Java decompiler PKID [下載]PKID-APP查殼工具-Android安全-看雪-安全社區|安全招聘|kanxue.com 測試流程 &#xff08;1&#xff09;通過Jadx對客戶端APK文件進行反編譯&#xff0c;觀察是否進行代碼混淆 &…

04-redis-分布式鎖-edisson

1 基本概念 百度百科&#xff1a;控制分布式系統之間同步訪問共享資源方式。 在分布式系統中&#xff0c;常常需要協調他們的動作。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源&#xff0c;那么訪問這些資源的時候&#xff0c;往往需要互斥來防止…

cf每日刷題

目錄 String&#xff08;800&#xff09; Skibidus and Amogu&#xff08;800&#xff09; Apples in Boxes&#xff08;1100&#xff09; String&#xff08;800&#xff09; https://codeforces.com/problemset/problem/2062/A #include <iostream> #include <…

AWS WebRTC:獲取ICE服務地址(part 1)

建立WebRTC連接的第二步是獲取ICE服務地址。 ICE全稱&#xff1a;Interactive Connectivity Establishment&#xff0c;建立互動連接。 ICE 服務地址&#xff0c;主要是 TURN 和 STUN 服務器的地址&#xff0c;用于 WebRTC 在 NAT 網絡環境中協商建立連接。 上代碼&#xff…