最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot 集成 MyBatis/MyBatis-Plus 超詳細(xì)教程

 更新時(shí)間:2026年06月01日 14:53:49   作者:顧北12  
本文詳細(xì)介紹了SpringBoot集成MyBatis和MyBatis-Plus的完整流程,包括數(shù)據(jù)源配置、Mapper掃描、XML映射等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

MyBatis 作為一款優(yōu)秀的持久層框架,以其靈活的 SQL 定制能力和低侵入性成為 Java 開發(fā)中主流的 ORM 方案。而 SpringBoot 憑借 “約定優(yōu)于配置” 的理念,大幅簡(jiǎn)化了項(xiàng)目搭建和配置流程。本文將從 MyBatis 基礎(chǔ)回顧入手,一步步講解 SpringBoot 集成 MyBatis、MyBatis-Plus 的完整流程,同時(shí)補(bǔ)充 Lombok、核心注解、常見配置等關(guān)鍵知識(shí)點(diǎn),幫助開發(fā)者快速上手。

SpringBoot集成Mybatis

回顧MyBatis

MyBatis 是一款半自動(dòng)化的 ORM(對(duì)象關(guān)系映射)框架,它摒棄了傳統(tǒng) JDBC 的硬編碼式 SQL 操作,將 SQL 語(yǔ)句與 Java 代碼解耦,支持 XML 或注解兩種方式編寫 SQL,同時(shí)提供結(jié)果映射、參數(shù)綁定等核心功能。

1.2 MyBatis 核心組件

  • SqlSessionFactory:會(huì)話工廠,MyBatis 核心入口,通過(guò)配置文件(mybatis-config.xml)或代碼構(gòu)建,負(fù)責(zé)創(chuàng)建 SqlSession。
  • SqlSession:會(huì)話對(duì)象,封裝了數(shù)據(jù)庫(kù)操作的所有方法(增刪改查),是 MyBatis 與數(shù)據(jù)庫(kù)交互的核心對(duì)象,線程不安全,需用完即關(guān)。
  • Mapper 接口:數(shù)據(jù)訪問層接口,MyBatis 會(huì)通過(guò)動(dòng)態(tài)代理生成接口的實(shí)現(xiàn)類,開發(fā)者只需定義接口和 SQL,無(wú)需編寫實(shí)現(xiàn)類。
  • XML 映射文件:核心配置 SQL 語(yǔ)句、參數(shù)映射、結(jié)果映射等,與 Mapper 接口一一對(duì)應(yīng)(也可通過(guò)注解替代)。
  • 配置文件繁瑣(需手動(dòng)配置數(shù)據(jù)源、SqlSessionFactory、Mapper 掃描等);
  • 重復(fù)代碼多(如 SqlSession 創(chuàng)建、關(guān)閉,事務(wù)處理等);
  • 基礎(chǔ) CRUD 操作需手動(dòng)編寫 SQL,效率低;
  • 分頁(yè)、邏輯刪除等功能需手動(dòng)實(shí)現(xiàn)。

SpringBoot集成Mybatis

環(huán)境準(zhǔn)備

  • JDK 8+
  • SpringBoot 2.7.x/3.x
  • MySQL 8.0+
  • Maven/Gradle

MyBatis-Spring-Boot-Starter

MyBatis-Boot 是 MyBatis 官方提供的 SpringBoot 集成組件(mybatis-spring-boot-starter),核心目標(biāo)是簡(jiǎn)化 MyBatis 在 SpringBoot 項(xiàng)目中的配置,實(shí)現(xiàn) “零配置” 快速集成。

核心優(yōu)勢(shì):

  • 自動(dòng)配置:自動(dòng)檢測(cè)數(shù)據(jù)源、自動(dòng)創(chuàng)建 SqlSessionFactory 和 SqlSessionTemplate(線程安全的 SqlSession 封裝);
  • 簡(jiǎn)化依賴:通過(guò) Starter 依賴一鍵引入 MyBatis 及 Spring 集成所需的所有包,無(wú)需手動(dòng)管理依賴版本;
  • 無(wú)縫集成 Spring:將 Mapper 接口自動(dòng)注冊(cè)為 Spring Bean,支持 Spring 事務(wù)管理;
  • 靈活擴(kuò)展:保留 MyBatis 原生配置能力,可通過(guò)配置文件或注解覆蓋默認(rèn)配置

創(chuàng)建項(xiàng)目并集成:

第一步,創(chuàng)建SpringBoot項(xiàng)目,項(xiàng)目信息設(shè)置如下圖所示:

第二步:選擇SpringBoot版本為3.3.5,添加SQL模塊下的"Mybatis Framework"和"MySQL Driver依賴"如下圖所示,點(diǎn)擊"Create"按鈕完成創(chuàng)建項(xiàng)目:

項(xiàng)目創(chuàng)建好了以后會(huì)自動(dòng)引入對(duì)應(yīng)的依賴:

第三步配置相關(guān)信息,可以使用application.propertiest以及application.yml,這里以propertiest為例:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/《數(shù)據(jù)庫(kù)名稱》?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=用戶名
spring.datasource.password=密碼
# 1. 指定 MyBatis 全局配置文件路徑(mybatis-config.xml),可配置全局參數(shù)(如緩存、插件、駝峰轉(zhuǎn)換等)
mybatis.config-location=classpath:mybatis-config.xml
# 2. 指定 MyBatis Mapper 映射文件(XML)的掃描路徑,匹配 classpath 下 mybatis/mapper 目錄下的所有 .xml 文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 3. 指定實(shí)體類包路徑,配置后在 XML 中可直接使用實(shí)體類名(如 User)代替全類名(com.yugonyun.demo.entity.User),簡(jiǎn)化 resultType/parameterType 配置
mybatis.type-aliases-package=com.yugonyun.demo.entity

第四步:在啟動(dòng)類中添加對(duì)Mapper包掃描@MapperScan,SpringBoot啟動(dòng)時(shí)就會(huì)掃描該路徑下的Mapper:

或者直接在Mapper接口加上@Mapper注解,建議直接使用上面的方式不然需要一個(gè)個(gè)在接口上添加注解

第五步:編碼resources/mabatis目錄下添加mybatis-config.xml,配置一些全局屬性

    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="autoMappingBehavior" value="FULL"/>
    </settings>

編寫實(shí)體類:

public class SysRole {
    private Long id;  //主鍵ID
    private String code;  //角色編碼
    private String roleName;  //角色名稱
    private Long createdUserId;  //創(chuàng)建者
    private Date createdTime;  //創(chuàng)建時(shí)間
    private Long updatedUserId;  //修改者
    private Date updatedTime;  //修改時(shí)間
    //省略get/set...
}

編寫Mapper接口:

public interface SysRoleMapper {
    /*
    * 查詢所有角色信息
    * */
    public List<SysRole> getAll();
}

在resources/mybaits/mapper目錄下創(chuàng)建并編寫SysRoleMapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ktjiaoyu.mapper.SysRoleMapper">
        <select id="getAll" resultType="com.ktjiaoyu.entity.SysRole">
        select * from sys_role
    </select>
</mapper>

第六步:測(cè)試編寫Junit測(cè)試類SysRoleMapperTester.java:

@SpringBootTest
public class SysRoleMapperTest {
    @Autowired
    private SysRoleMapper sysRoleMapper;

    @Test
    public void testSelectAll() {
       List<SysRole> sysRoles = sysRoleMapper.getAll();
       for (SysRole sysRole : sysRoles) {
            System.out.println(sysRole);
        }
    }
}

運(yùn)行效果:

此處無(wú)法看到輸出執(zhí)行的SQL,并且會(huì)輸出其他日志信息,可以在application.propertis中配置日志輸出:

logging.level.root=warn
logging.level.com.yugonyun.mapper=trace
logging.pattern.console=%p%m%n
  1. 至此,SpringBoot和Mybatis集成就完成了

Mybaits-Plus簡(jiǎn)介

MyBatis-Plus(簡(jiǎn)稱 MP)是基于 MyBatis 的增強(qiáng)工具,在保留 MyBatis 原有功能的基礎(chǔ)上,實(shí)現(xiàn)了 “無(wú) SQL” CRUD、分頁(yè)、邏輯刪除、樂觀鎖等功能,大幅提升開發(fā)效率。

什么是 MyBatis-Plus?

MyBatis-Plus 核心理念是 “只做增強(qiáng),不做改變”,它封裝了基礎(chǔ) CRUD 操作,無(wú)需編寫 SQL 即可實(shí)現(xiàn)數(shù)據(jù)訪問,同時(shí)支持自定義 SQL 擴(kuò)展,完美兼容 MyBatis 原有代碼。

核心優(yōu)勢(shì)

  • 內(nèi)置通用 Mapper/Service,無(wú)需編寫基礎(chǔ) CRUD SQL;
  • 支持自動(dòng)分頁(yè)、邏輯刪除、樂觀鎖、枚舉映射等高頻功能;
  • 強(qiáng)大的條件構(gòu)造器(QueryWrapper),靈活拼接復(fù)雜 SQL;
  • 支持主鍵自動(dòng)生成(雪花算法、自增等);
  • 無(wú)縫兼容 MyBatis 配置和代碼。

框架結(jié)構(gòu):

Lombok簡(jiǎn)介

Lombok 是一款 Java 開發(fā)插件,通過(guò)注解(如 @Data、@NoArgsConstructor)自動(dòng)生成 getter/setter/ 構(gòu)造器 /toString 等代碼,核心優(yōu)勢(shì):

  • 簡(jiǎn)化實(shí)體類代碼,減少冗余;
  • 提高開發(fā)效率,避免手動(dòng)維護(hù) getter/setter;
  • 支持鏈?zhǔn)骄幊蹋?code>@Accessors(chain = true))。

導(dǎo)入依賴:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

使用示例:

// 鏈?zhǔn)秸{(diào)用(可選)
@Accessors(chain = true)
// 核心簡(jiǎn)化:getter/setter/toString/equals/hashCode + 無(wú)參構(gòu)造
@Data
// 補(bǔ)充全參構(gòu)造(@Data 不含全參)
@AllArgsConstructor
// 補(bǔ)充無(wú)參構(gòu)造(若@Data的@RequiredArgsConstructor覆蓋了無(wú)參,需顯式聲明)
@NoArgsConstructor
public class User {
    private Long id;
    private String username;
    // 排除toString輸出
    @ToString.Exclude
    private String password;
    private Integer age;
}

MyBatis-Plus快速上手

替換依賴

將 MyBatis Starter 替換為 MyBatis-Plus Starter(無(wú)需額外引入 MyBatis 依賴):

<!-- MyBatis-Plus SpringBoot 集成包 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

添加配置:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ktsms_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
logging.level.root=warn
logging.level.com.yugonyun.mapper=trace
logging.pattern.console=%p%m%n

啟動(dòng)類

在啟動(dòng)類中添加Mapper包的掃描,和之前Mybatis一樣的操作:

編碼:

編寫實(shí)體類SysRole:

@Data
@NoArgsConstructor
@AllArgsConstructor
// 表名
@TableName("sys_role")
public class SysRole {
    // 主鍵ID, 自增
    @TableId(type = IdType.AUTO)
    private Long id;  //主鍵ID
    private String code;  //角色編碼
    private String roleName;  //角色名稱
    private Long createdUserId;  //創(chuàng)建者
    private Date createdTime;  //創(chuàng)建時(shí)間
    private Long updatedUserId;  //修改者
    private Date updatedTime;  //修改時(shí)間
}

@TableName 注解在類上,指定數(shù)據(jù)庫(kù)表名(實(shí)體名與表名不一致時(shí)需要指定)

@Tableld(type =ldType.AUTO)注解在主鍵屬性上,且指定主鍵生成策略為自動(dòng)增長(zhǎng)

@TableField 注解在屬性上,指定數(shù)據(jù)庫(kù)字段名(不滿足默認(rèn)匹配規(guī)則時(shí)需要指定)。屬性和字段名默認(rèn)匹配規(guī)則是全小寫的屬性對(duì)應(yīng)同名的字段:采用駱駝命名規(guī)則的屬性對(duì)應(yīng)的字段名為兩個(gè)單詞之間使用_下劃線連接,例如:usrName 屬性默認(rèn)對(duì)應(yīng)的字段名為 usr name。

編寫Mapper接口:

public interface SysRoleMapper extends BaseMapper<SysRole> {
}

測(cè)試:

創(chuàng)建SysRoleMapperTester.java

@SpringBootTest
public class SysRoleMapperTest {
    @Autowired
    private SysRoleMapper sysRoleMapper;

    @Test
    public void testSelectAll() {
        List<SysRole> sysRoles = sysRoleMapper.selectList(null);
        for (SysRole sysRole : sysRoles) {
            System.out.println(sysRole);
        }
    }
}
  • 至此,SpringBoot集成Mybaits-Plus完成,通過(guò)以上幾個(gè)步驟我們就實(shí)現(xiàn)了sysRole查詢所有數(shù)據(jù)的功能,基本的CRUD都能完成,幾乎不用寫SQL語(yǔ)句

常用注解

MybatisPlus如何知道我們要査詢的是哪張表?表中有哪些字段呢?

MybatisPlus 就是根據(jù) PO 實(shí)體的信息來(lái)推斷出表的信息,從而生成SQL的。默認(rèn)情況下:

  • MybatisPlus 會(huì)把 PO 實(shí)體的類名駝峰轉(zhuǎn)下劃線作為表名MybatisPlus 會(huì)把PO 實(shí)體的所有變量名駝峰轉(zhuǎn)下劃線作為表的字段名,并根據(jù)變量類D型推斷字段類型
  • MybatisPlus 會(huì)把名為id的字段作為主鍵
  • 但很多情況下,默認(rèn)的實(shí)現(xiàn)與實(shí)際場(chǎng)景不符,因此 MybatisPlus提供了一些注解便于我們聲明表信息。

@TableName

全類名:com.baomidou.mybatisplus.annotation.TableName

核心作用

指定實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名(解決實(shí)體類名與表名不一致的問題)。

常用屬性

屬性名類型作用
valueString表名(核心屬性,可省略屬性名直接寫值)
schemaString數(shù)據(jù)庫(kù) schema(多租戶 / 多 schema 場(chǎng)景)
keepGlobalPrefixboolean是否保留全局表前綴(配合 mybatis-plus.global-config.db-config.table-prefix 使用)

@TableId

全類名:com.baomidou.mybatisplus.annotation.TableId

核心作用

標(biāo)記實(shí)體類的主鍵字段,指定主鍵生成策略。

常用屬性

屬性名類型作用
valueString主鍵字段名(實(shí)體屬性名與表主鍵字段名不一致時(shí)使用)
typeIdType(枚舉)主鍵生成策略(核心屬性)

IdType 枚舉值說(shuō)明

枚舉值作用
AUTO數(shù)據(jù)庫(kù)自增(需保證數(shù)據(jù)庫(kù)表主鍵設(shè)置為自增)
NONE無(wú)策略(需手動(dòng)設(shè)置主鍵值)
INPUT手動(dòng)輸入(與 NONE 類似,MP 不干預(yù),需手動(dòng)賦值)
ASSIGN_ID雪花算法生成主鍵(默認(rèn),支持 Long/Integer/String 類型,適合分布式場(chǎng)景)
ASSIGN_UUID生成 UUID(不含中劃線,String 類型)
ID_WORKER已過(guò)時(shí),等效 ASSIGN_ID(僅支持 Long 類型)
ID_WORKER_STR已過(guò)時(shí),等效 ASSIGN_ID(String 類型)
UUID已過(guò)時(shí),等效 ASSIGN_UUID

@TableField

全類名

com.baomidou.mybatisplus.annotation.TableField

核心作用

指定實(shí)體屬性與數(shù)據(jù)庫(kù)表字段的映射關(guān)系,支持排除字段、字段填充、忽略字段等功能。

常用屬性

屬性名類型作用
valueString字段名(實(shí)體屬性名與表字段名不一致時(shí)使用)
existboolean是否為數(shù)據(jù)庫(kù)表字段(默認(rèn) true,false 表示該屬性非表字段)
fillFieldFill(枚舉)字段填充策略(新增 / 更新時(shí)自動(dòng)填充,如創(chuàng)建時(shí)間、更新時(shí)間)
selectboolean查詢時(shí)是否包含該字段(默認(rèn) true,false 表示查詢時(shí)忽略)
insertStrategyFieldStrategy(枚舉)插入時(shí)的字段驗(yàn)證策略(如 NOT_NULL:非空才插入)
updateStrategyFieldStrategy(枚舉)更新時(shí)的字段驗(yàn)證策略(如 IGNORED:忽略空值,強(qiáng)制更新)
whereStrategyFieldStrategy(枚舉)作為查詢條件時(shí)的驗(yàn)證策略

核心功能

從以上步驟中,我們可以看到集成 MyBatis-Plus非常的簡(jiǎn)單,只需要引入 starter 啟動(dòng)器,并配置mapper 掃描路徑即可。
但 MyBatis-Plus的強(qiáng)大遠(yuǎn)不止這些功能,想要詳細(xì)了解 MyBatis-Plus 的強(qiáng)大功能?那就繼續(xù)往下看吧!

CRUD接口:

MyBatis-Plus通用的CRUD功能都在 BaseMapper<T>接口中:

說(shuō)明:

  • BaseMapper 接口封裝通用CRUD,為Mybatis-Plus 啟動(dòng)時(shí)自動(dòng)解析實(shí)體表關(guān)系映射轉(zhuǎn)換為 Mybatis 內(nèi)部對(duì)象注入容器
  • 參數(shù) Serializable 為任意類型主鍵,Mybatis-Plus不推薦使用復(fù)合主鍵,約定每一張表都有自己的唯一id 主鍵
  • 泛型T為任意實(shí)體對(duì)象
  • 對(duì)象 Wrapper 為條件構(gòu)造器

條件構(gòu)造器:

條件構(gòu)造器(Wrapper)是 MyBatis-Plus 實(shí)現(xiàn)動(dòng)態(tài) SQL 的核心,通過(guò)鏈?zhǔn)秸{(diào)用拼接 WHERE 條件,無(wú)需手動(dòng)拼接 SQL 字符串,支持查詢、更新、刪除操作。

核心構(gòu)造器類型

構(gòu)造器類型適用場(chǎng)景核心特點(diǎn)
QueryWrapper<T>查詢 / 刪除條件構(gòu)造基礎(chǔ)版,字段名硬編碼
UpdateWrapper<T>更新條件構(gòu)造支持直接設(shè)置更新字段
LambdaQueryWrapper<T>查詢 / 刪除條件構(gòu)造(Lambda)類型安全,避免字段名寫錯(cuò)
LambdaUpdateWrapper<T>更新條件構(gòu)造(Lambda)類型安全,無(wú)字段硬編碼

常用條件方法

方法作用示例
eq等于 =eq("age", 20)
gt/ge大于 >/ 大于等于≥gt("age", 18)
lt/le小于 < / 小于等于≤lt("age", 30)
like模糊查詢 LIKElike ("name", "張")
inIN 條件in("id", Arrays.asList(1,2,3))
orderByDesc降序排序orderByDesc("age")
select指定查詢字段select("id", "name")
set更新字段賦值set("age", 21)

使用示例

1. QueryWrapper(基礎(chǔ)查詢)

QueryWrapper<User> wrapper = new QueryWrapper<User>()
        .eq("user_name", "張三")
        .gt("age", 18)
        .like("email", "qq.com");
List<User> list = userMapper.selectList(wrapper);

2.UpdateWrapper(更新操作)

UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
        .eq("user_name", "張三")
        .set("age", 22)
        .setSql("age = age + 1"); // 支持SQL片段
userMapper.update(null, wrapper);

3.LambdaQueryWrapper(類型安全查詢)

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
        .eq(User::getUserName, "張三")
        .gt(User::getAge, 18);
List<User> list = userMapper.selectList(wrapper);

注意事項(xiàng)

  1. Lambda 版構(gòu)造器通過(guò)實(shí)體類方法引用字段(如 User::getAge),避免字段名硬編碼錯(cuò)誤;
  2. UpdateWrapper 可直接通過(guò) set/setSql 設(shè)置更新字段,無(wú)需創(chuàng)建實(shí)體類;
  3. 條件默認(rèn)以 AND 拼接,需 OR 時(shí)調(diào)用 .or() 方法即可。

到此這篇關(guān)于SpringBoot 集成 MyBatis/MyBatis-Plus 超詳細(xì)教程的文章就介紹到這了,更多相關(guān)SpringBoot 集成 MyBatis/MyBatis-Plus內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

大同市| 台州市| 义乌市| 义马市| 宁远县| 阜城县| 乌拉特中旗| 兴业县| 股票| 木里| 偃师市| 天等县| 恭城| 西青区| 个旧市| 德庆县| 黄梅县| 上高县| 二手房| 监利县| 芜湖县| 刚察县| 静安区| 靖西县| 新乐市| 辽宁省| 广宗县| 玉山县| 呼伦贝尔市| 年辖:市辖区| 屯昌县| 峨山| 揭阳市| 昭觉县| 绿春县| 布尔津县| 永春县| 犍为县| 湖北省| 牡丹江市| 永修县|