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

SpringBoot 集成 MyBatis/MyBatis-Plus使用示例教程

 更新時間:2025年12月19日 10:48:36   作者:顧北12  
本文詳細介紹了如何在Spring Boot項目中集成MyBatis和MyBatis-Plus,并通過Lombok簡化代碼,通過本文的學習,開發(fā)者可以快速掌握Spring Boot集成MyBatis和MyBatis-Plus的完整流程,并利用Lombok提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧

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

SpringBoot集成Mybatis

回顧MyBatis

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

1.2 MyBatis 核心組件

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

SpringBoot集成Mybatis

環(huá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),核心目標是簡化 MyBatis 在 SpringBoot 項目中的配置,實現(xiàn) “零配置” 快速集成。

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

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

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

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

項目創(chuà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ù)庫名稱》?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. 指定實體類包路徑,配置后在 XML 中可直接使用實體類名(如 User)代替全類名(com.yugonyun.demo.entity.User),簡化 resultType/parameterType 配置
mybatis.type-aliases-package=com.yugonyun.demo.entity

第四步:在啟動類中添加對Mapper包掃描@MapperScan,SpringBoot啟動時就會掃描該路徑下的Mapper:

  • 或者直接在Mapper接口加上@Mapper注解,建議直接使用上面的方式不然需要一個個在接口上添加注解
  • 第五步:編碼resources/mabatis目錄下添加mybatis-config.xml,配置一些全局屬性
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="autoMappingBehavior" value="FULL"/>
    </settings>

編寫實體類:

public class SysRole {
    private Long id;  //主鍵ID
    private String code;  //角色編碼
    private String roleName;  //角色名稱
    private Long createdUserId;  //創(chuàng)建者
    private Date createdTime;  //創(chuàng)建時間
    private Long updatedUserId;  //修改者
    private Date updatedTime;  //修改時間
    //省略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>

第六步:測試編寫Junit測試類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);
        }
    }
}

運行效果:

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

logging.level.root=warn
logging.level.com.yugonyun.mapper=trace
logging.pattern.console=%p%m%n

至此,SpringBoot和Mybatis集成就完成了

SpringBoot集成Mybatis-Plus

Mybaits-Plus簡介

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

什么是 MyBatis-Plus?

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

核心優(yōu)勢

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

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

Lombok簡介

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

  • 簡化實體類代碼,減少冗余;
  • 提高開發(fā)效率,避免手動維護 getter/setter;
  • 支持鏈式編程(@Accessors(chain = true))。

導入依賴:

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

使用示例:

// 鏈式調(diào)用(可選)
@Accessors(chain = true)
// 核心簡化:getter/setter/toString/equals/hashCode + 無參構(gòu)造
@Data
// 補充全參構(gòu)造(@Data 不含全參)
@AllArgsConstructor
// 補充無參構(gòu)造(若@Data的@RequiredArgsConstructor覆蓋了無參,需顯式聲明)
@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(無需額外引入 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

啟動類

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

編碼:

編寫實體類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)建時間
    private Long updatedUserId;  //修改者
    private Date updatedTime;  //修改時間
}
  • @TableName 注解在類上,指定數(shù)據(jù)庫表名(實體名與表名不一致時需要指定)
  • @Tableld(type =ldType.AUTO)注解在主鍵屬性上,且指定主鍵生成策略為自動增長
  • @TableField 注解在屬性上,指定數(shù)據(jù)庫字段名(不滿足默認匹配規(guī)則時需要指定)。屬性和字段名默認匹配規(guī)則是全小寫的屬性對應同名的字段:采用駱駝命名規(guī)則的屬性對應的字段名為兩個單詞之間使用_下劃線連接,例如:usrName 屬性默認對應的字段名為 usr name。

編寫Mapper接口:

public interface SysRoleMapper extends BaseMapper<SysRole> {
}

測試:

創(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完成,通過以上幾個步驟我們就實現(xiàn)了sysRole查詢所有數(shù)據(jù)的功能,基本的CRUD都能完成,幾乎不用寫SQL語句

常用注解

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

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

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

@TableName

全類名:com.baomidou.mybatisplus.annotation.TableName
核心作用

指定實體類對應的數(shù)據(jù)庫表名(解決實體類名與表名不一致的問題)。

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

@TableId

全類名:com.baomidou.mybatisplus.annotation.TableId
核心作用

標記實體類的主鍵字段,指定主鍵生成策略。

常用屬性
屬性名類型作用
valueString主鍵字段名(實體屬性名與表主鍵字段名不一致時使用)
typeIdType(枚舉)主鍵生成策略(核心屬性)
IdType 枚舉值說明
枚舉值作用
AUTO數(shù)據(jù)庫自增(需保證數(shù)據(jù)庫表主鍵設置為自增)
NONE無策略(需手動設置主鍵值)
INPUT手動輸入(與 NONE 類似,MP 不干預,需手動賦值)
ASSIGN_ID雪花算法生成主鍵(默認,支持 Long/Integer/String 類型,適合分布式場景)
ASSIGN_UUID生成 UUID(不含中劃線,String 類型)
ID_WORKER已過時,等效 ASSIGN_ID(僅支持 Long 類型)
ID_WORKER_STR已過時,等效 ASSIGN_ID(String 類型)
UUID已過時,等效 ASSIGN_UUID

@TableField

全類名

com.baomidou.mybatisplus.annotation.TableField

核心作用

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

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

核心功能

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

CRUD接口:

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

說明:

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

條件構(gòu)造器:

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

核心構(gòu)造器類型
構(gòu)造器類型適用場景核心特點
QueryWrapper<T>查詢 / 刪除條件構(gòu)造基礎(chǔ)版,字段名硬編碼
UpdateWrapper<T>更新條件構(gòu)造支持直接設置更新字段
LambdaQueryWrapper<T>查詢 / 刪除條件構(gòu)造(Lambda)類型安全,避免字段名寫錯
LambdaUpdateWrapper<T>更新條件構(gòu)造(Lambda)類型安全,無字段硬編碼
常用條件方法
方法作用示例
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);
注意事項
  1. Lambda 版構(gòu)造器通過實體類方法引用字段(如 User::getAge),避免字段名硬編碼錯誤;
  2. UpdateWrapper 可直接通過 set/setSql 設置更新字段,無需創(chuàng)建實體類;
  3. 條件默認以 AND 拼接,需 OR 時調(diào)用 .or() 方法即可。

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

相關(guān)文章

最新評論

巨鹿县| 潜山县| 鄯善县| 永新县| 龙南县| 离岛区| 广汉市| 密山市| 安顺市| 阳原县| 滨州市| 墨玉县| 炎陵县| 黄山市| 奈曼旗| 华阴市| 昂仁县| 石泉县| 镇雄县| 蒙山县| 马公市| 刚察县| 余庆县| 嫩江县| 东丽区| 南通市| 孝义市| 阿勒泰市| 永嘉县| 湖北省| 左贡县| 镇宁| 荔浦县| 福清市| 历史| 共和县| 巴彦淖尔市| 班玛县| 彩票| 漠河县| 武乡县|