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

SpringCloud持久層框架MyBatis Plus的使用與原理解析

 更新時(shí)間:2024年10月17日 15:27:09   作者:Damon小智  
MyBatisPlus為MyBatis的增強(qiáng)版,專注于簡(jiǎn)化數(shù)據(jù)庫(kù)操作,提供自動(dòng)化CRUD、內(nèi)置分頁(yè)和樂(lè)觀鎖等功能,極大提升開發(fā)效率,在SpringCloud微服務(wù)架構(gòu)中,MyBatisPlus通過(guò)插件機(jī)制和自動(dòng)生成代碼功能,有效支持企業(yè)級(jí)應(yīng)用和分布式系統(tǒng)的開發(fā)

在現(xiàn)代微服務(wù)架構(gòu)中,SpringCloud 是一個(gè)非常流行的解決方案。而在數(shù)據(jù)庫(kù)操作層面,MyBatis Plus 作為 MyBatis 的增強(qiáng)工具,能夠簡(jiǎn)化開發(fā),提升效率,特別是在開發(fā)企業(yè)級(jí)應(yīng)用和分布式系統(tǒng)時(shí)尤為有用。本文將詳細(xì)介紹 MyBatis Plus 的使用方法、原理及其與 MyBatis 的區(qū)別。

一、MyBatis Plus 簡(jiǎn)介

1. MyBatis 簡(jiǎn)介

MyBatis 是一個(gè)優(yōu)秀的 ORM 框架,它通過(guò) XML 或注解的方式將 Java 方法與 SQL 語(yǔ)句進(jìn)行映射,并且可以靈活地控制 SQL 執(zhí)行的各個(gè)細(xì)節(jié),提供極高的自由度。它廣泛應(yīng)用于項(xiàng)目中,尤其是在對(duì) SQL 語(yǔ)句要求比較嚴(yán)格的場(chǎng)景中。

2. MyBatis Plus 介紹

MyBatis Plus 是在 MyBatis 的基礎(chǔ)上進(jìn)行增強(qiáng)的持久層框架,專注于簡(jiǎn)化 MyBatis 的開發(fā)工作。它封裝了常用的 CRUD 操作,極大地減少了開發(fā)者編寫 SQL 的工作量。其目標(biāo)是“更少的配置,更多的功能”,通過(guò)插件機(jī)制提供更強(qiáng)大的功能擴(kuò)展。

3. MyBatis 與 MyBatis Plus 的對(duì)比

對(duì)比項(xiàng)MyBatisMyBatis Plus
核心理念手寫 SQL,靈活但需要大量的 SQL 代碼自動(dòng)化 CRUD,大大減少手寫 SQL
SQL 編寫需要手動(dòng)編寫所有 SQL 語(yǔ)句提供默認(rèn) CRUD 接口,只需少量自定義 SQL
復(fù)雜查詢需要手動(dòng)編寫復(fù)雜 SQL 語(yǔ)句提供條件構(gòu)造器,簡(jiǎn)化復(fù)雜查詢操作
分頁(yè)需要手動(dòng)編寫分頁(yè)邏輯內(nèi)置分頁(yè)插件,簡(jiǎn)化分頁(yè)操作
性能優(yōu)化自定義 SQL 性能優(yōu)化較靈活提供多種插件支持性能優(yōu)化,如 SQL 執(zhí)行分析插件
代碼生成不支持代碼生成提供自動(dòng)代碼生成器,支持一鍵生成 Mapper、Service 等
擴(kuò)展能力通過(guò)配置擴(kuò)展內(nèi)置多種插件機(jī)制,支持?jǐn)U展,如樂(lè)觀鎖、審計(jì)等

通過(guò)這張對(duì)比表可以看出,MyBatis Plus 在開發(fā)效率和功能擴(kuò)展上具有顯著優(yōu)勢(shì),尤其在企業(yè)級(jí)開發(fā)中,可以大大簡(jiǎn)化數(shù)據(jù)庫(kù)操作的工作。

二、MyBatis Plus 的基本使用

1. 基礎(chǔ)依賴和配置

要在 SpringCloud 中使用 MyBatis Plus,首先需要在項(xiàng)目的 pom.xml 中添加 MyBatis Plus 的依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.4</version>
</dependency>

接下來(lái),在 application.yml 中配置數(shù)據(jù)庫(kù)連接:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useSSL=false
    username: root
    password: your_password
  mybatis-plus:
    mapper-locations: classpath:/mapper/*.xml

2. 實(shí)體類的定義

在 MyBatis Plus 中,實(shí)體類是映射數(shù)據(jù)庫(kù)表的核心。在實(shí)體類中,常用 @TableName@TableId 注解來(lái)映射表和主鍵。

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3. Mapper 接口的編寫

Mapper 接口是 MyBatis Plus 提供的基礎(chǔ) CRUD 接口,繼承 BaseMapper 就可以擁有常用的 CRUD 功能,無(wú)需額外編寫 SQL。

public interface UserMapper extends BaseMapper<User> {
}

4. Service 層的實(shí)現(xiàn)

為了更好地管理業(yè)務(wù)邏輯,通常會(huì)在 Service 層中編寫業(yè)務(wù)方法??梢酝ㄟ^(guò)注入 Mapper 來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public List<User> getAllUsers() {
        return userMapper.selectList(null);
    }
    public void createUser(User user) {
        userMapper.insert(user);
    }
}

三、MyBatis Plus 的高級(jí)用法

1. 分頁(yè)插件

分頁(yè)是大多數(shù)系統(tǒng)必備的功能。MyBatis Plus 內(nèi)置分頁(yè)插件,可以通過(guò)簡(jiǎn)單的配置實(shí)現(xiàn)高效分頁(yè)。

@Autowired
private UserMapper userMapper;
public IPage<User> getUsersPage(int pageNum, int pageSize) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return userMapper.selectPage(page, null);
}

2. 樂(lè)觀鎖插件

MyBatis Plus 支持樂(lè)觀鎖,防止多個(gè)用戶同時(shí)修改同一條數(shù)據(jù)時(shí)的并發(fā)問(wèn)題??梢酝ㄟ^(guò)在實(shí)體類上添加 @Version 注解來(lái)啟用樂(lè)觀鎖功能。

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @Version
    private Integer version; // 樂(lè)觀鎖版本字段
}

3. 多租戶插件

MyBatis Plus 提供了多租戶插件,支持在多租戶架構(gòu)中為每個(gè)租戶分配獨(dú)立的數(shù)據(jù)空間,避免數(shù)據(jù)泄露或沖突。

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 多租戶插件配置
        TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor();
        interceptor.addInnerInterceptor(tenantLineInnerInterceptor);
        return interceptor;
    }
}

4. 自動(dòng)填充功能

MyBatis Plus 支持自動(dòng)填充常見字段,如創(chuàng)建時(shí)間、更新時(shí)間等??梢酝ㄟ^(guò) @TableField 注解配置字段的自動(dòng)填充策略。

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime; // 自動(dòng)填充創(chuàng)建時(shí)間
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime; // 自動(dòng)填充更新時(shí)間
}

5. 邏輯刪除功能

邏輯刪除是一種不物理刪除數(shù)據(jù),而是通過(guò)標(biāo)記刪除狀態(tài)的方式實(shí)現(xiàn)刪除。MyBatis Plus 提供了邏輯刪除支持,可以通過(guò) @TableLogic 注解實(shí)現(xiàn)。

@Data
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableLogic
    private Integer deleted; // 邏輯刪除字段
}

四、MyBatis Plus 原理詳解

MyBatis Plus 的原理是基于 MyBatis 的核心功能進(jìn)行增強(qiáng),主要通過(guò) 插件機(jī)制代碼生成機(jī)制 提供額外的功能支持。

1. 基于 MyBatis 核心的增強(qiáng)

MyBatis Plus 是對(duì) MyBatis 的擴(kuò)展和增強(qiáng),在 MyBatis 的基礎(chǔ)上引入了大量的插件和自定義功能。例如,通過(guò)擴(kuò)展 BaseMapper,MyBatis Plus 為所有實(shí)體類提供了基礎(chǔ)的 CRUD 功能,開發(fā)者無(wú)需編寫重復(fù)的 SQL。

2. 插件機(jī)制

MyBatis Plus 的插件機(jī)制非常靈活,允許開發(fā)者自定義插件,擴(kuò)展 MyBatis Plus 的功能。MyBatis Plus 通過(guò) 責(zé)任鏈模式 處理多個(gè)插件請(qǐng)求,插件之間通過(guò) 鏈?zhǔn)秸{(diào)用 實(shí)現(xiàn)功能的擴(kuò)展。

常見的插件包括:

  • 分頁(yè)插件:通過(guò)在 SQL 執(zhí)行前后進(jìn)行攔截,實(shí)現(xiàn)分頁(yè)功能。
  • 多租戶插件:通過(guò)在 SQL 中自動(dòng)加入租戶 ID 實(shí)現(xiàn)數(shù)據(jù)隔離。
  • 樂(lè)觀鎖插件:通過(guò)在 SQL 中自動(dòng)加入版本號(hào)實(shí)現(xiàn)并發(fā)控制。

3. 條件構(gòu)造器

MyBatis Plus 提供了 條件構(gòu)造器,簡(jiǎn)化了復(fù)雜 SQL 的拼裝過(guò)程。條件構(gòu)造器基于 Lambda 表達(dá)式,能夠靈活構(gòu)建動(dòng)態(tài)查詢條件,極大地簡(jiǎn)化了 SQL 的編寫工作。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getName, "Tom").ge(User::getAge, 18
);
List<User> users = userMapper.selectList(queryWrapper);

4. 自動(dòng)代碼生成器

MyBatis Plus 提供了自動(dòng)代碼生成器,支持通過(guò)數(shù)據(jù)庫(kù)表結(jié)構(gòu)自動(dòng)生成實(shí)體類、Mapper、Service、Controller 等層的代碼,大幅減少手工編寫代碼的工作量。這一特性非常適合大型項(xiàng)目和快速迭代開發(fā)的場(chǎng)景。

5. 動(dòng)態(tài) SQL 解析

MyBatis Plus 支持動(dòng)態(tài) SQL 解析,通過(guò)注解或 XML 方式在運(yùn)行時(shí)解析 SQL,生成最終的 SQL 語(yǔ)句。這種方式使得 SQL 編寫更加靈活,能夠適應(yīng)復(fù)雜的業(yè)務(wù)邏輯。

五、MyBatis Plus 的使用總結(jié)

MyBatis Plus 在簡(jiǎn)化 MyBatis 開發(fā)工作、提升開發(fā)效率和靈活性方面表現(xiàn)出色。它不僅保留了 MyBatis 的強(qiáng)大 SQL 自定義功能,還通過(guò)插件機(jī)制和自動(dòng)化工具提供了更多的擴(kuò)展功能。

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

優(yōu)勢(shì)說(shuō)明
自動(dòng)化 CRUD通過(guò)內(nèi)置的 CRUD 接口,減少了開發(fā)者手動(dòng)編寫 SQL 的工作量。
分頁(yè)和多租戶支持MyBatis Plus 內(nèi)置分頁(yè)和多租戶插件,能夠輕松處理復(fù)雜的查詢場(chǎng)景。
性能優(yōu)化通過(guò)插件機(jī)制和緩存機(jī)制,MyBatis Plus 提供多種性能優(yōu)化手段,保證高效的數(shù)據(jù)庫(kù)操作。
代碼生成器自動(dòng)生成常用代碼,提升開發(fā)效率,加快項(xiàng)目開發(fā)速度。

總之,MyBatis Plus 是 SpringCloud 項(xiàng)目中非常優(yōu)秀的持久層框架。通過(guò)其豐富的功能和靈活的擴(kuò)展機(jī)制,可以大幅提升開發(fā)效率,特別適用于大規(guī)模分布式系統(tǒng)的開發(fā)。

到此這篇關(guān)于SpringCloud持久層框架MyBatis Plus的使用與原理詳解的文章就介紹到這了,更多相關(guān)SpringCloud MyBatis Plus使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用spring AOP記錄用戶操作日志的方法示例

    利用spring AOP記錄用戶操作日志的方法示例

    這篇文章主要給大家介紹了關(guān)于利用spring AOP記錄用戶操作日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)

    java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)的相關(guān)參考資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • RabbitMQ消息中間件示例詳解

    RabbitMQ消息中間件示例詳解

    這篇文章主要給大家介紹了關(guān)于RabbitMQ消息中間件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Java多線程之讀寫鎖分離設(shè)計(jì)模式

    Java多線程之讀寫鎖分離設(shè)計(jì)模式

    這篇文章主要介紹了Java多線程讀寫鎖分離設(shè)計(jì)模式,主要利用Java到嗎完成read read 并行化、read write 不允許、write write 不允許幾項(xiàng)任務(wù),需要的朋友可以參考一下
    2021-10-10
  • springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼

    springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼

    本文主要介紹了springboot實(shí)現(xiàn)簡(jiǎn)單的消息對(duì)話的示例代碼,可以使用WebSocket技術(shù),WebSocket是一種在客戶端和服務(wù)器之間提供實(shí)時(shí)雙向通信的協(xié)議,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java中多線程與并發(fā)_volatile關(guān)鍵字的深入理解

    Java中多線程與并發(fā)_volatile關(guān)鍵字的深入理解

    這篇文章主要給大家介紹了關(guān)于Java中多線程與并發(fā)_volatile關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 淺談java Properties類的使用基礎(chǔ)

    淺談java Properties類的使用基礎(chǔ)

    下面小編就為大家分享一篇淺談java Properties類的使用基礎(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java系統(tǒng)升級(jí)與遷移的完整指南

    Java系統(tǒng)升級(jí)與遷移的完整指南

    在Java生態(tài)中,系統(tǒng)升級(jí)和遷移是開發(fā)者必須面對(duì)的“成人禮”,從JAR地獄到模塊化戰(zhàn)爭(zhēng),從Java 8到Java 17的版本跳躍,每一次升級(jí)都伴隨著技術(shù)債的清算、架構(gòu)的重構(gòu)和性能的飛躍,所以本文給大家介紹了Java系統(tǒng)升級(jí)與遷移的完整指南,需要的朋友可以參考下
    2025-08-08
  • Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼

    Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼

    本篇文章主要介紹了Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

镇赉县| 墨脱县| 四会市| 达孜县| 奇台县| 南通市| 上栗县| 梅河口市| 青浦区| 贵南县| 望城县| 焉耆| 信丰县| 华亭县| 沈丘县| 土默特左旗| 澄江县| 建始县| 都兰县| 黄浦区| 壤塘县| 兰西县| 禹州市| 蓬溪县| 武宣县| 五华县| 四川省| 巩留县| 东兰县| 霸州市| 乐业县| 若尔盖县| 衢州市| 三穗县| 保山市| 新巴尔虎左旗| 方山县| 商河县| 明星| 大方县| 农安县|