国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MyBatis-Plus】MyBatis進(jìn)階使用

這篇具有很好參考價(jià)值的文章主要介紹了【MyBatis-Plus】MyBatis進(jìn)階使用。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、MyBatis-Plus簡介

1.1 介紹

1.2 優(yōu)點(diǎn)

1.3 結(jié)構(gòu)

二、MyBatis-Plus基本使用

2.1 配置

2.2 代碼生成

2.3 CRUD接口測試

三、MyBatis-Plus策略詳解

3.1 主鍵生成策略

3.2 雪花ID生成器

3.3 字段自動填充策略

3.4 邏輯刪除

四、MyBatis-Plus插件使用

4.1?樂觀鎖插件

4.1.1?什么是樂觀鎖和悲觀鎖?

4.1.2 樂觀鎖實(shí)現(xiàn)

4.2 分頁插件?


一、MyBatis-Plus簡介

1.1 介紹

MyBatis-Plus?(opens new window)(簡稱 MP)是一個(gè)?MyBatis?(opens new window)的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變(也就是說mybatis有的plus都有),為簡化開發(fā)、提高效率而生。

1.2 優(yōu)點(diǎn)

  • 代碼生成器:?MyBatis-Plus 提供了一個(gè)代碼生成器,可以根據(jù)數(shù)據(jù)庫表自動生成實(shí)體類、mapper 接口和 XML 映射文件,大大提高了開發(fā)效率。
  • CRUD 操作簡化:?MyBatis-Plus 提供了一系列 CRUD 操作的方法,例如?save()saveOrUpdate()、updateById()?和?deleteById(),這些方法可以簡化常見的數(shù)據(jù)庫操作。
  • 分頁查詢:?MyBatis-Plus 提供了分頁查詢的支持,您可以使用?PageHelper?插件或者內(nèi)置的分頁功能來實(shí)現(xiàn)分頁查詢。
  • 性能優(yōu)化:?MyBatis-Plus 提供了二級緩存和批量操作的支持,可以提高數(shù)據(jù)庫操作的性能。
  • 代碼簡潔:?MyBatis-Plus 提供了許多有用的注解,可以簡化 MyBatis 的代碼,例如?@TableId@TableField?和?@TableLogic。
  • 可擴(kuò)展性:?MyBatis-Plus 提供了許多擴(kuò)展點(diǎn),您可以通過自定義插件或攔截器來擴(kuò)展 MyBatis-Plus 的功能。

如果您正在使用 MyBatis,我強(qiáng)烈建議您使用 MyBatis-Plus ?。?!?

1.3 結(jié)構(gòu)

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

  1. 核心模塊(Core Module):核心模塊包含了Mybatis-Plus的核心功能和基本組件。它提供了通用的Mapper接口、通用的CRUD方法的實(shí)現(xiàn)、條件構(gòu)造器、分頁插件等核心功能的實(shí)現(xiàn)。核心模塊是整個(gè)框架的基礎(chǔ),其他模塊都依賴于它。

  2. 代碼生成器(Code Generator):代碼生成器是一個(gè)可選的輔助工具,用于根據(jù)數(shù)據(jù)庫表結(jié)構(gòu)自動生成實(shí)體類、Mapper接口、XML映射文件等基礎(chǔ)代碼。通過代碼生成器,開發(fā)者可以快速生成基礎(chǔ)代碼,減少手寫重復(fù)代碼的工作量。

  3. 擴(kuò)展模塊(Extension Module):擴(kuò)展模塊是Mybatis-Plus提供的一些擴(kuò)展功能和增強(qiáng)組件的集合。它包括了一些常用的增強(qiáng)功能,如邏輯刪除、字段自動填充、樂觀鎖等。開發(fā)者可以通過引入擴(kuò)展模塊,輕松地增加這些功能的支持。

  4. 注解(annotation):用于對實(shí)體類、Mapper接口以及SQL語句進(jìn)行配置和標(biāo)記。通過使用注解,可以簡化配置文件的編寫,提高代碼的可讀性和可維護(hù)性。 ?

簡介 | MyBatis-PlusMyBatis-Plus 官方文檔https://baomidou.com/pages/24112f/#%E7%89%B9%E6%80%A7

二、MyBatis-Plus基本使用

2.1 配置

1、導(dǎo)入pom依賴

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--自動生成模版引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--代碼生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>

2、配置數(shù)據(jù)庫與mybatis-plus

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/bookshop

mybatis-plus:
  # Mybatis Mapper所對應(yīng)的XML位置
  mapper-locations: classpath:mapper/*.xml
  # 別名包掃描路徑
  type-aliases-package: com.ycxw.mybatis_test.model
  # 是否開啟自動駝峰命名規(guī)則(camel case)映射
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    com.ycxw.mybatis_test.mapper: debug

2.2 代碼生成

1、添加代碼生成器

package com.ycxw.mybatis_test.config;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@Slf4j
public class MySQLGenerator {

    private final static String URL = "jdbc:mysql://localhost:3306/bookshop";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "123456";

    private final static DataSourceConfig.Builder DATA_SOURCE_CONFIG =
            new DataSourceConfig.Builder(URL, USERNAME, PASSWORD);

    public static void main(String[] args) {
        FastAutoGenerator.create(DATA_SOURCE_CONFIG)
                .globalConfig(
                        (scanner, builder) ->
                                builder.author("云村小威")
                                        .outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
                                        .commentDate("yyyy-MM-dd")
                                        .dateType(DateType.TIME_PACK)
                                        .disableOpenDir()
                )
                .packageConfig((builder) ->
                        builder.parent("com.ycxw.mybatis_test")
                                .entity("entity")
                                .service("service")
                                .serviceImpl("service.impl")
                                .mapper("mapper")
                                .xml("mapper.xml")
                                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))
                )
                .injectionConfig((builder) ->
                        builder.beforeOutputFile(
                                (a, b) -> log.warn("tableInfo: " + a.getEntityName())
                        )
                )
                .strategyConfig((scanner, builder) ->
                        builder.addInclude(getTables(scanner.apply("請輸入表名,多個(gè)英文逗號分隔?所有輸入 all")))
                                .addTablePrefix("tb_", "t_", "lay_", "meeting_", "sys_")
                                .entityBuilder()
                                .enableChainModel()
                                .enableLombok()
                                .enableTableFieldAnnotation()
                                .controllerBuilder()
                                .enableRestStyle()
                                .enableHyphenStyle()
                                .build()
                )
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}

這段 Java 代碼是用于自動生成 MyBatis-Plus 代碼的。它使用 FastAutoGenerator 來生成實(shí)體類、服務(wù)類、服務(wù)實(shí)現(xiàn)類、映射器接口和映射器 XML 文件。

代碼主要做了以下事情:

  1. 定義數(shù)據(jù)源配置,指定數(shù)據(jù)庫 URL、用戶名和密碼。
  2. 創(chuàng)建 FastAutoGenerator 實(shí)例,并指定數(shù)據(jù)源配置。
  3. 配置全局配置,包括作者、輸出目錄、注釋日期和日期類型等。
  4. 配置包配置,包括父包名、實(shí)體包名、服務(wù)包名、服務(wù)實(shí)現(xiàn)包名、映射器包名和 XML 包名等。
  5. 配置注入配置,在輸出文件之前記錄表信息。
  6. 配置策略配置,包括要生成的表名、要移除的前綴、實(shí)體類配置、控制器類配置等。
  7. 指定模板引擎為 Freemarker。
  8. 執(zhí)行代碼生成。

當(dāng)運(yùn)行此代碼時(shí),它將生成 MyBatis-Plus 代碼,并將其輸出到指定目錄。

3、運(yùn)行該類輸入需要生成的數(shù)據(jù)表名

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

tips:

? ? ? ? 在這里可以發(fā)現(xiàn)除了entity實(shí)體包下的Book類其他的類和接口都是空了,其實(shí)它自帶了增刪改查等方法的,可以直接調(diào)用,如果需要更復(fù)雜的數(shù)據(jù)接口可以自行編寫。

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

最后注意添加mapper注釋交給spring管理,并在啟動器添加掃描mapper的注釋:

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

2.3 CRUD接口測試

package com.ycxw.mybatis_test.controller;

import com.github.yitter.idgen.YitIdHelper;
import com.ycxw.mybatis_test.entity.Book;
import com.ycxw.mybatis_test.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 書本信息表 前端控制器
 * </p>
 *
 * @author 云村小威
 * @since 2023-12-16
 */
@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private IBookService bookService;

    @GetMapping("/list")
    public Object list() {
        return bookService.list();
    }

    @PostMapping("/save")
    public Object add(Book book) {
        /*設(shè)置雪花id*/
        book.setId(YitIdHelper.nextId());
        return bookService.save(book);
    }

    @PatchMapping("/update")
    public Object edit(Book book) {
        return bookService.updateById(book);
    }

    @DeleteMapping("/{id}")
    public Object del(@PathVariable Long id) {
        return bookService.removeById(id);
    }

}

查詢測試:?

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring等等。。。?

三、MyBatis-Plus策略詳解

3.1 主鍵生成策略

@Getter
@Setter
@Accessors(chain = true)
@TableName("t_book")
public class Book implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 書本編號
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
  • @TableId注解屬性

屬性 類型 必須指定 默認(rèn)值 描述
value String "" 主鍵字段名
type Enum IdType.NONE 指定主鍵類型

IdType屬性:

描述
AUTO 數(shù)據(jù)庫 ID 自增
NONE 無狀態(tài),該類型為未設(shè)置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
INPUT insert 前自行 set 主鍵值
ASSIGN_ID 分配 ID(主鍵類型為 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默認(rèn)實(shí)現(xiàn)類為DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID 分配 UUID,主鍵類型為 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默認(rèn) default 方法)
ID_WORKER 分布式全局唯一 ID 長整型類型(please use?ASSIGN_ID)
UUID 32 位 UUID 字符串(please use?ASSIGN_UUID)
ID_WORKER_STR 分布式全局唯一 ID 字符串類型(please use?ASSIGN_ID)

3.2 雪花ID生成器

提示

自 3.3.0 開始,默認(rèn)使用雪花算法+UUID(不含中劃線)

自定義示例工程:

  • spring-boot 示例 :傳送門
方法 主鍵生成策略 主鍵類型 說明
nextId ASSIGN_ID,ID_WORKER,ID_WORKER_STR Long,Integer,String 支持自動轉(zhuǎn)換為 String 類型,但數(shù)值類型不支持自動轉(zhuǎn)換,需精準(zhǔn)匹配,例如返回 Long,實(shí)體主鍵就不支持定義為 Integer
nextUUID ASSIGN_UUID,UUID String 默認(rèn)不含中劃線的 UUID 生成

示例:

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

為什么要用ID生成器?

UUID 的主要優(yōu)點(diǎn)是:

  • 它能夠生成真正隨機(jī)的標(biāo)識符,不需要依賴于數(shù)據(jù)庫或其他外部服務(wù)。
  • 它可以跨不同的系統(tǒng)和平臺使用,而不需要進(jìn)行任何修改。

Snowflake ID 的主要優(yōu)點(diǎn)是:

  • 它能夠生成遞增的唯一標(biāo)識符。
  • 它可以分布式生成,因此可以擴(kuò)展到大型系統(tǒng)。

????????首先UUID它是隨機(jī)生成的,生成的id可能跨度較大。在性能方面,Snowflake ID 優(yōu)于 UUID。Snowflake ID 的生成速度更快,存儲空間更小,并且具備遞增性。但是,Snowflake ID 需要依賴于數(shù)據(jù)庫或其他外部服務(wù)來存儲和管理元數(shù)據(jù),并且需要進(jìn)行額外的配置和維護(hù)。

在實(shí)際應(yīng)用中,可以選擇使用 UUID 或 Snowflake ID,具體取決于具體的需求和場景。

3.3 字段自動填充策略

  • @TableField 字段注解
    /**
     * 書本名稱
     */
    @TableField(value = "bookname",fill = FieldFill.INSERT)
    private String bookname;
屬性 類型 必須指定 默認(rèn)值 描述
value String "" 數(shù)據(jù)庫字段名
exist boolean true 是否為數(shù)據(jù)庫表字段
fill Enum FieldFill.DEFAULT 字段自動填充策略

Fill 屬性值

描述
DEFAULT 默認(rèn)不處理
INSERT 插入時(shí)填充字段
UPDATE 更新時(shí)填充字段
INSERT_UPDATE 插入和更新時(shí)填充字段

在這里我們可以設(shè)置該字段是否自動填充以及什么時(shí)候填充,一般在時(shí)間字段設(shè)置自動填充方便查詢數(shù)據(jù)的插入和更新時(shí)間,當(dāng)然下面只是一個(gè)簡單的案例:

我們還需要編寫 自定義實(shí)現(xiàn)類 MyMetaObjectHandler

package com.ycxw.mybatis_test.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("插入時(shí)自動填充 ....");
        this.strictInsertFill(metaObject, "bookname", String.class, "暫無"); // 起始版本 3.3.0(推薦使用)
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("修改時(shí)自動填充 ....");
        this.strictUpdateFill(metaObject, "updateTime", String.class, "未填寫修改名稱"); // 起始版本 3.3.0(推薦)
    }
}

定義了自動填充,我們在新增或修改時(shí)就可以不為該字段賦值。

3.4 邏輯刪除

為什么要使用邏輯刪除?

  1. 保留歷史記錄:通過邏輯刪除,可以保留項(xiàng)目的完整歷史記錄,而無需物理刪除數(shù)據(jù)。這對于調(diào)試、審計(jì)和數(shù)據(jù)分析非常有用。
  2. 恢復(fù)數(shù)據(jù):如果項(xiàng)目數(shù)據(jù)被意外刪除,通過邏輯刪除可以輕松恢復(fù)。而物理刪除的數(shù)據(jù)則無法恢復(fù)。
  3. 性能優(yōu)化:邏輯刪除可以提高項(xiàng)目的性能,因?yàn)椴恍枰锢韯h除數(shù)據(jù)。這對于大型項(xiàng)目或具有大量數(shù)據(jù)的項(xiàng)目尤為重要。
  4. 安全性:邏輯刪除可以提高項(xiàng)目的安全性,因?yàn)椴恍枰锢韯h除數(shù)據(jù),可以防止不必要的數(shù)據(jù)泄露。
  5. 合規(guī)性:一些行業(yè)或法規(guī)可能要求保留數(shù)據(jù)一段特定時(shí)間。邏輯刪除可以幫助項(xiàng)目遵守這些規(guī)定,而無需永久存儲數(shù)據(jù)。

????????通過mybatis-plus擴(kuò)展的邏輯刪除功能,再調(diào)用刪除接口時(shí)將刪除自動轉(zhuǎn)為修改。將數(shù)據(jù)狀態(tài)修改為不可查詢到(前提是該表含有特定的狀態(tài)列)

使用方法:

1、全局配置

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

2、局部配置

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

這里不可以配置@TableLogic注解,但必須指定@TableField并設(shè)置對應(yīng)數(shù)據(jù)庫中的字段名。

?

3、測試

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

例如刪除第一條數(shù)據(jù):

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

再次查看該數(shù)據(jù)表:

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

調(diào)用查詢測試:

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

可以發(fā)現(xiàn)剛才刪除的數(shù)據(jù)將不能查到,而數(shù)據(jù)庫仍存在。

四、MyBatis-Plus插件使用

4.1?樂觀鎖插件

4.1.1?什么是樂觀鎖和悲觀鎖?

????????樂觀鎖悲觀鎖是兩種不同的并發(fā)控制機(jī)制,用于防止多用戶同時(shí)修改同一份數(shù)據(jù)時(shí)產(chǎn)生數(shù)據(jù)不一致的問題。

  • 樂觀鎖假設(shè)在并發(fā)操作時(shí),數(shù)據(jù)不會被其他用戶修改,因此在執(zhí)行更新操作前不需要對數(shù)據(jù)加鎖。在提交更新時(shí),會檢查數(shù)據(jù)是否已經(jīng)被修改。如果數(shù)據(jù)已經(jīng)被修改,則會拋出異常,要求用戶重新獲取數(shù)據(jù)并重新提交更新。
  • 悲觀鎖假設(shè)在并發(fā)操作時(shí),數(shù)據(jù)可能會被其他用戶修改,因此在執(zhí)行更新操作前需要先對數(shù)據(jù)加鎖。在更新操作執(zhí)行完成后,鎖才會被釋放。這樣可以確保在數(shù)據(jù)更新時(shí),不會被其他用戶修改。

樂觀鎖的優(yōu)點(diǎn):

  • 性能好,因?yàn)樵诖蠖鄶?shù)情況下不需要加鎖。
  • 可伸縮性好,因?yàn)椴恍枰S護(hù)鎖狀態(tài)。
  • 不會出現(xiàn)死鎖。

樂觀鎖的缺點(diǎn):

  • 可能出現(xiàn)數(shù)據(jù)不一致的問題,因?yàn)樵谔峤桓聲r(shí),數(shù)據(jù)可能已經(jīng)被其他用戶修改。
  • 需要應(yīng)用程序代碼來處理并發(fā)沖突。

悲觀鎖的優(yōu)點(diǎn):

  • 可以保證數(shù)據(jù)一致性,因?yàn)樵诟聰?shù)據(jù)時(shí),其他用戶不能修改數(shù)據(jù)。
  • 不需要應(yīng)用程序代碼來處理并發(fā)沖突。

悲觀鎖的缺點(diǎn):

  • 性能差,因?yàn)樵诟聰?shù)據(jù)時(shí)需要加鎖。
  • 可伸縮性差,因?yàn)樾枰S護(hù)鎖狀態(tài)。
  • 可能出現(xiàn)死鎖。

4.1.2 樂觀鎖實(shí)現(xiàn)

當(dāng)要更新一條記錄的時(shí)候,希望這條記錄沒有被別人更新。
樂觀鎖實(shí)現(xiàn)方式:

  • 取出記錄時(shí),獲取當(dāng)前 version
  • 更新時(shí),帶上這個(gè) version
  • 執(zhí)行更新時(shí), set version = newVersion where version = oldVersion
  • 如果 version 不對,就更新失敗

?

所以先給需要加鎖的表添加version列,同時(shí)在實(shí)體類中加上@Version注解

@Version
private Integer version;

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

1、配置插件

package com.ycxw.mybatis_test.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// Spring Boot 方式
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

2、編寫修改接口測試

    @PutMapping("/edit")
    public Object update(){
        Book b1 = bookService.getById("16");
        b1.setPrice(133F);
        bookService.updateById(b1);
        return "1";
    }

調(diào)用查詢接口可以看到:首先查詢該數(shù)據(jù),在修改version值并判斷該數(shù)據(jù)的version值是否等于當(dāng)前的version值。?

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

????????可以看到version值已變成2了,沒修改一次就會加1。這就意味著當(dāng)我修改改數(shù)據(jù)時(shí)version變?yōu)榱?,而其他人同時(shí)修改該數(shù)據(jù)時(shí)首先查詢到的是1,而我已經(jīng)修改為2,他人再修改時(shí)條件已不再成立將無法修改。

以下案例進(jìn)行驗(yàn)證:

    @PutMapping("/edit")
    public Object update(){
        /*模仿兩人同時(shí)修改不同數(shù)據(jù)時(shí)*/
        Book b1 = bookService.getById("16");
        b1.setPrice(133F);
        Book b2 = bookService.getById("16");
        b2.setPrice(210F);

        bookService.updateById(b1);
        bookService.updateById(b2);
        return "1";
    }

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

????????可以看到只有第一條修改成功了,且version變?yōu)?(首先查詢的值為2,修改后自動變?yōu)?)。如果他人同時(shí)于此修改時(shí),而version判斷不成立則無法修改。?

4.2 分頁插件?

1、首先添加分頁插件配置,與樂觀鎖配置位置一樣,該類可以同時(shí)配置多個(gè)插件。

package com.ycxw.mybatis_test.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// Spring Boot 方式
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        /*配置樂觀鎖*/
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        /*配置分頁*/
        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多數(shù)據(jù)源可以不配具體類型 否則都建議配上具體的DbType
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多個(gè)插件,切記分頁最后添加

        return mybatisPlusInterceptor;
    }
}

?2、編寫查詢接口測試

    @GetMapping("/list")
    public Object list() {
        //簡單的分頁查詢
        Page<Book> page = new Page<>(1,5);
        Page<Book> res = bookService.page(page, wrapper);
        res.getTotal();//數(shù)據(jù)總數(shù)
        res.getPages();//數(shù)據(jù)總頁數(shù)
        return res.getRecords();
    }

?【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

以上只是一個(gè)簡單的查詢案例,mp通過page類實(shí)現(xiàn)了簡單分頁模型。需要進(jìn)行條件查詢則要了解查詢構(gòu)造器:

????????QueryWrapper是Mybatis-Plus提供的一個(gè)條件構(gòu)造器,用于快速構(gòu)建SQL查詢語句的條件部分。

????????QueryWrapper的語法類似于Mybatis的XML文件中的where標(biāo)簽,其最終會被轉(zhuǎn)換為SQL語句的條件部分。我們可以通過鏈?zhǔn)秸{(diào)用的方式,不斷添加查詢條件,從而構(gòu)建出復(fù)雜的查詢條件。

【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring

代碼示例:

    @GetMapping("/list")
    public Object list(@RequestParam(value = "bookname", required = false, defaultValue = "")  String bookname) {
        //查詢條件
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        /**
         * 設(shè)置查詢條件 bookname like %name%
         * 如:
         *    warpper.eq("price",100,300) == price 在 100 ~ 300 之間
         *    ...
         */
        wrapper.like("bookname",bookname);

        //分頁條件條件
        Page<Book> page = new Page<>(1,5);
        Page<Book> res = bookService.page(page, wrapper);
        res.getTotal();//數(shù)據(jù)總數(shù)
        res.getPages();//數(shù)據(jù)總頁數(shù)
        return res.getRecords();
    }

?可以看到通過like方法指定注入需要查詢的列名,自定拼接到sql中【MyBatis-Plus】MyBatis進(jìn)階使用,springboot + mybatis-plus,mybatis,java,spring boot,spring文章來源地址http://www.zghlxwxcb.cn/news/detail-765372.html

到了這里,關(guān)于【MyBatis-Plus】MyBatis進(jìn)階使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • springboot~mybatis-plus中使用TypeHandler做類型映射

    springboot~mybatis-plus中使用TypeHandler做類型映射

    mybatis-plus中,如果數(shù)據(jù)表字段類型與java實(shí)體字段類型不一樣,這時(shí)就需要做類型映射與轉(zhuǎn)換了,我們一般可以實(shí)現(xiàn)TypeHandler接口,或者繼承抽象類BaseTypeHandler,我們下面舉例來說明一下它的使用方法。 數(shù)據(jù)表里字段是varchar,java里是List集合,例如:我的愛好標(biāo)簽 數(shù)據(jù)表里字

    2024年04月24日
    瀏覽(34)
  • 【MyBatis-Plus 進(jìn)階學(xué)習(xí)筆記】

    【MyBatis-Plus 進(jìn)階學(xué)習(xí)筆記】

    2.1 優(yōu)化1 自動填充 有的類沒有更新和創(chuàng)建時(shí)間字段 2.2 優(yōu)化2 自己設(shè)置時(shí)間時(shí)填充自己設(shè)置的,不設(shè)置時(shí)自動填充 4.1 PerformanceInterceptor 3.2.0版本被廢除 4.2 p6spy 使用

    2024年02月15日
    瀏覽(21)
  • 詳解Mybatis-Plus中分頁插件PaginationInterceptor, MybatisPlusInterceptor在SpringBoot中的使用

    我們在開發(fā)的過程中,經(jīng)常會遇到分頁操作,其分為邏輯分頁和物理分頁,具體可參考我的博文:

    2023年04月14日
    瀏覽(23)
  • Mybatis-Plus+SpringBoot框架詳解

    Mybatis-Plus+SpringBoot框架詳解

    1、SpringBoot 簡介 SpringBoot 提供了一種快速使用 Spring 的方式,基于約定優(yōu)于配置的思想,可以讓開發(fā)人員不必在配置與邏輯業(yè)務(wù)之間進(jìn)行思維的切換,全身心的投入到邏輯業(yè)務(wù)的代碼編寫中,從而大大提高了開發(fā)的效率,一定程度上縮短了項(xiàng)目周期。 2014 年 4 月,Spring Boot 1

    2023年04月08日
    瀏覽(28)
  • SpringBoot整合Mybatis-Plus(SpringBoot3)

    SpringBoot整合Mybatis-Plus(SpringBoot3)

    依賴pom.xml: pom.xml resource包下的Application.yml: Aollication.yml pojo包下的實(shí)體類User: User mapper包下的接口UserMapper: UserMapper 主啟動類DemoPlusApplication DemoPlusApplication 測試類DemoApplicationTest: DemoApplicationTest 實(shí)現(xiàn)結(jié)果 檢測數(shù)據(jù)庫連接: C(Create): D(Delete): U(Update) R(Read)

    2024年03月20日
    瀏覽(23)
  • Springboot 整合Mytbatis與Mybatis-Plus

    Springboot 整合Mytbatis與Mybatis-Plus

    目錄 1. springboot整合mybatis?? ?1.1 添加pom.xml依賴 ?1.2 新建jdbc.properties 文件添加以下內(nèi)容 ?1.3 新建generatorConfig.xml 文件添加以下內(nèi)容 (自動生成代碼類)? ?1.4 修改application.properties 文件 添加以下內(nèi)容 ?1.5 修改主類MapperScan ?1.6 編寫接口實(shí)現(xiàn)類進(jìn)行測試? 2. springboot整合mybatis-p

    2024年02月06日
    瀏覽(23)
  • springboot+mybatis-plus實(shí)現(xiàn)自動建表

    springboot+mybatis-plus實(shí)現(xiàn)自動建表

    好長時(shí)間沒輸出了,最近工作上也是太多事,領(lǐng)導(dǎo)動不動就拍腦門,那叫一個(gè)酸爽~ 工作能力的提現(xiàn)不但是技術(shù)或解決問題的能力上,還體現(xiàn)在要能立刻滿足領(lǐng)導(dǎo)的各種需求,不管是哪方面的需求,這樣才能夠拍上馬屁,步步高升。 言歸正傳,作為技術(shù)從業(yè)者,還是要多深耕

    2024年02月16日
    瀏覽(19)
  • 如何在springboot中配置mybatis-plus

    如何在springboot中配置mybatis-plus

    MyBatis-Plus(簡稱為MP)是一個(gè)開源的Java持久層框架,它是在MyBatis基礎(chǔ)上進(jìn)行擴(kuò)展的。他的出現(xiàn)是為了進(jìn)一步簡化和增強(qiáng)MyBatis的功能,提供更多便捷的特性和工具,以提高開發(fā)效率。 本文將闡述如何在springboot中配置和使用mybatis-plus 目錄 1配置 2 使用 在pom.xml文件中配置mybati

    2024年02月13日
    瀏覽(21)
  • SpringBoot整合MyBatis-Plus,趕緊整過來!

    提示:以下是本篇文章正文內(nèi)容 MyBatis-Plus官網(wǎng)介紹:MyBatis-Plus (opens new window)(簡稱 MP)是一個(gè) MyBatis (opens new window)的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。 MyBatis-Plus封裝了單表的crud操作,減少基礎(chǔ)代碼編寫,提高開發(fā)效率。 支持自

    2024年02月06日
    瀏覽(17)
  • springboot3.2 整合 mybatis-plus

    springboot3.2 整合 mybatis-plus

    springboot3.2 正式發(fā)布了 迫不及待地的感受了一下 結(jié)果在整個(gè)mybatis-plus 的時(shí)候遇到了如下報(bào)錯(cuò) 主要是由于 mybatis-plus 中 mybatis 的整合包版本不夠?qū)е碌?排除 mybatis-plus 中自帶的 mybatis 整合包,單獨(dú)引入即可 修改依賴后正常

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包