在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();} }
代碼解析:
-
使用@Resource注入UserMapper
-
創建QueryWrapper構建查詢條件
-
調用selectOne方法查詢單個用戶
-
根據查詢結果返回相應信息
五、MyBatis Plus的優勢
-
簡化CRUD操作:繼承BaseMapper即獲得基本CRUD方法
-
強大的條件構造器:通過QueryWrapper可以方便地構建復雜查詢條件
-
分頁插件:內置分頁功能,簡化分頁查詢實現
-
自動填充:支持字段自動填充(如創建時間、更新時間等)
-
樂觀鎖:內置樂觀鎖實現
六、常見問題解決
-
數據庫連接失敗:
-
檢查MySQL服務是否啟動
-
檢查連接URL、用戶名和密碼是否正確
-
檢查數據庫驅動版本是否匹配
-
-
表字段與實體類屬性映射問題:
-
確保數據庫字段名與實體類屬性名一致(或使用@TableField指定)
-
檢查是否配置了正確的駝峰命名轉換
-
-
分頁不生效:
-
確保配置了分頁插件
-
檢查是否傳入了正確的Page參數
-
七、總結
本文詳細介紹了SpringBoot整合MyBatis的完整流程,從環境準備到實際應用,涵蓋了數據庫設計、實體類創建、Mapper接口編寫以及基本CRUD操作。MyBatis Plus作為MyBatis的增強工具,可以顯著提高開發效率,減少樣板代碼的編寫。
在實際項目中,還可以進一步探索:
-
MyBatis Plus的自動填充功能
-
多數據源配置
-
復雜的動態SQL構建
-
二級緩存配置等高級特性