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

MyBatis-Plus?實體類注解的實現(xiàn)示例

 更新時間:2024年09月25日 08:38:31   作者:Flying_Fish_Xuan  
MyBatis-Plus作為MyBatis的增強版,提供了一系列實用的注解,如@TableName、@TableId、@TableField等,旨在簡化數(shù)據(jù)庫和Java實體類之間的映射及CRUD操作,通過這些注解,開發(fā)者可以輕松實現(xiàn)表映射、字段映射、邏輯刪除、自動填充和樂觀鎖等功能

MyBatis-Plus 是 MyBatis 的增強版,旨在簡化開發(fā)者的 CRUD 操作。它通過豐富的特性和注解,簡化了數(shù)據(jù)庫與 Java 實體類之間的映射。MyBatis-Plus 提供了一系列的實體類注解,幫助開發(fā)者更輕松地映射數(shù)據(jù)庫表、字段,并處理常見的數(shù)據(jù)操作需求。

1. MyBatis-Plus 實體類注解概覽

MyBatis-Plus 提供了一系列注解,用于簡化實體類與數(shù)據(jù)庫表之間的映射。常用注解包括:

  • @TableName:指定實體類對應的數(shù)據(jù)庫表名。
  • @TableId:指定主鍵字段及其生成策略。
  • @TableField:指定非主鍵字段的映射信息。
  • @TableLogic:用于實現(xiàn)邏輯刪除功能。
  • @TableField(fill = ...):用于指定字段的自動填充策略。
  • @Version:用于實現(xiàn)樂觀鎖。

2. @TableName 注解

@TableName 用于指定實體類對應的數(shù)據(jù)庫表名。如果實體類名與表名不一致,則需要使用該注解進行映射。

使用示例

import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    private Integer id;
    private String username;
    private String email;
}

在上面的示例中,實體類 User 映射到數(shù)據(jù)庫表 user。如果實體類名和數(shù)據(jù)庫表名相同,則可以省略此注解。

常用屬性

  • value:指定表名。
  • schema:指定數(shù)據(jù)庫架構(gòu)名稱(可選)。
  • autoResultMap:是否啟用自動結(jié)果映射,默認 false。
@TableName(value = "user", schema = "mydb", autoResultMap = true)

3. @TableId 注解

@TableId 用于指定表的主鍵列,并可以設置主鍵的生成策略。常見的生成策略有自動遞增(AUTO)、手動分配(INPUT)等。

使用示例

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String username;
    private String email;
}

在上面的示例中,id 字段被標記為主鍵,并且使用了自動遞增策略。

常用屬性

  • value:指定主鍵字段名稱。
  • type:指定主鍵生成策略,常見的生成策略有:
    • IdType.AUTO:數(shù)據(jù)庫自動生成(通常是自增主鍵)。
    • IdType.INPUT:手動輸入主鍵。
    • IdType.ASSIGN_ID:MyBatis-Plus 自動生成 ID(分布式 ID 算法)。
    • IdType.UUID:生成 UUID 作為主鍵。
@TableId(value = "user_id", type = IdType.ASSIGN_ID)

4. @TableField 注解

@TableField 用于標注非主鍵字段的映射。該注解可以配置數(shù)據(jù)庫表中的列名、是否進行自動填充、是否是查詢字段等。

使用示例

import com.baomidou.mybatisplus.annotation.TableField;

public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;

    @TableField("user_name")
    private String username;

    @TableField(exist = false)
    private String tempField;  // 非數(shù)據(jù)庫字段
}

在上面的示例中,username 字段對應數(shù)據(jù)庫表中的 user_name 列,而 tempField 是一個實體類的臨時字段,不會映射到數(shù)據(jù)庫。

常用屬性

  • value:指定數(shù)據(jù)庫列名。
  • exist:是否是數(shù)據(jù)庫表中的字段,默認 true。如果設置為 false,表示該字段不參與數(shù)據(jù)庫映射。
  • fill:指定字段的自動填充策略,支持 INSERTUPDATE、INSERT_UPDATE。
@TableField(value = "created_at", fill = FieldFill.INSERT)

5. @TableLogic 注解

@TableLogic 用于實現(xiàn)邏輯刪除功能。邏輯刪除是在數(shù)據(jù)表中不真正刪除記錄,而是通過標記某個字段(如 is_deleted)來表示數(shù)據(jù)是否被刪除。

使用示例

import com.baomidou.mybatisplus.annotation.TableLogic;

public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;

    private String username;

    @TableLogic
    private Integer isDeleted;
}

在上面的示例中,isDeleted 字段用于標記該記錄是否被刪除。當使用 MyBatis-Plus 提供的刪除方法(如 deleteById)時,實際上會更新 isDeleted 字段的值,而不是物理刪除該記錄。

默認行為

  • 未刪除:isDeleted = 0(默認為 0)。
  • 已刪除:isDeleted = 1(默認為 1)。

自定義邏輯刪除值

如果邏輯刪除標記的值不為 0 和 1,可以通過全局配置進行自定義。

mybatis-plus:
  global-config:
    db-config:
      logic-not-delete-value: 0  # 未刪除的值
      logic-delete-value: 2      # 已刪除的值

6. 自動填充字段 @TableField(fill = ...)

自動填充是指在插入或更新數(shù)據(jù)時,MyBatis-Plus 自動為某些字段賦值。常見的場景包括:創(chuàng)建時間、更新時間、操作人等。

使用示例

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

import java.time.LocalDateTime;

public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}

在上面的示例中:

  • createdAt 字段會在插入時自動填充。
  • updatedAt 字段會在插入和更新時自動填充。

自動填充實現(xiàn)步驟

  • 定義實體類字段并加上 @TableField(fill = ...) 注解。
  • 創(chuàng)建自動填充處理器:實現(xiàn) MetaObjectHandler 接口,重寫 insertFill 和 updateFill 方法。
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createdAt", LocalDateTime::now, LocalDateTime.class);
        this.strictInsertFill(metaObject, "updatedAt", LocalDateTime::now, LocalDateTime.class);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime::now, LocalDateTime.class);
    }
}

7. @Version 樂觀鎖注解

@Version 注解用于實現(xiàn)樂觀鎖。在并發(fā)環(huán)境下,樂觀鎖可以防止數(shù)據(jù)的“臟寫”,通過版本號(version)字段來保證數(shù)據(jù)的一致性。

使用示例

import com.baomidou.mybatisplus.annotation.Version;

public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;

    private String username;

    @Version
    private Integer version;  // 樂觀鎖版本號
}

當更新 User 表時,MyBatis-Plus 會檢查 version 字段。如果版本號匹配,則進行更新,同時版本號自增;否則更新失敗,防止數(shù)據(jù)沖突。

8. 綜合示例

以下是一個使用了多種 MyBatis-Plus 注解的完整實體類示例:

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;

@Data
@TableName("user")
public class User {

    @TableId(type = IdType.AUTO)
    private Integer id;

    @TableField("user_name")
    private String username;

    private String email;

    @TableLogic
    private Integer isDeleted;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;

   

 @Version
    private Integer version;
}
  • username 字段映射到數(shù)據(jù)庫的 user_name 列。
  • isDeleted 實現(xiàn)邏輯刪除。
  • createdAt 和 updatedAt 實現(xiàn)自動填充。
  • version 用于實現(xiàn)樂觀鎖。

9. 總結(jié)

MyBatis-Plus 提供的實體類注解極大簡化了數(shù)據(jù)庫字段與 Java 類之間的映射和管理,開發(fā)者可以通過簡單的注解來完成復雜的數(shù)據(jù)庫操作。

  • @TableName:用于映射實體類與數(shù)據(jù)庫表。
  • @TableId 和 @TableField:用于映射主鍵和普通字段。
  • @TableLogic:實現(xiàn)邏輯刪除。
  • @Version:用于樂觀鎖控制并發(fā)修改。
  • 自動填充:通過 @TableField(fill = ...) 配合自定義 MetaObjectHandler 實現(xiàn)創(chuàng)建時間、更新時間等自動填充。

到此這篇關(guān)于MyBatis-Plus 實體類注解的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MyBatis-Plus 實體類注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java fastjson解析json字符串實現(xiàn)過程解析

    Java fastjson解析json字符串實現(xiàn)過程解析

    這篇文章主要介紹了Java fastjson解析json字符串實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java實現(xiàn)前綴樹詳解

    Java實現(xiàn)前綴樹詳解

    Java實現(xiàn)前綴樹(Trie樹)是一種樹形數(shù)據(jù)結(jié)構(gòu),用于字符串的存儲和查找,適用于大量字符串的快速匹配。通過將字符串拆分為字符序列,依次構(gòu)建樹形結(jié)構(gòu),將每個字符串的字符依次存儲在樹的節(jié)點上,實現(xiàn)高效的字符串匹配
    2023-04-04
  • JAVA 并發(fā)容器的一些易出錯點你知道嗎

    JAVA 并發(fā)容器的一些易出錯點你知道嗎

    今天給大家?guī)淼奈恼率荍ava并發(fā)編程的相關(guān)知識,文中對java同步容器與并發(fā)容器做了非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-09-09
  • SpringBoot集成WebSocket遇到的問題及解決

    SpringBoot集成WebSocket遇到的問題及解決

    這篇文章主要介紹了SpringBoot集成WebSocket遇到的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • Springboot源碼 AbstractAdvisorAutoProxyCreator解析

    Springboot源碼 AbstractAdvisorAutoProxyCreator解析

    這篇文章主要介紹了Springboot源碼 AbstractAdvisorAutoProxyCreator解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 親手教你SpringBoot中的多數(shù)據(jù)源集成問題

    親手教你SpringBoot中的多數(shù)據(jù)源集成問題

    本文主要是介紹基于springboot的多數(shù)據(jù)源切換,輕量級的一種集成方案,對于小型的應用可以采用這種方案,我之前在項目中用到是因為簡單,便于擴展以及優(yōu)化,對SpringBoot多數(shù)據(jù)源集成問題感興趣的朋友一起看看吧
    2022-03-03
  • Spring?Security配置保姆級教程

    Spring?Security配置保姆級教程

    Spring?Security是一個功能強大且可高度自定義的身份驗證和訪問控制框架。它是保護基于Spring的應用程序的事實上的標準。Spring?Security是一個專注于為Java應用程序提供身份驗證和授權(quán)的框架
    2023-02-02
  • Java Swing JTextField文本框的代碼示例

    Java Swing JTextField文本框的代碼示例

    這篇文章主要介紹了Java Swing JTextField文本框的代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java Optional介紹和用法示例解析

    Java Optional介紹和用法示例解析

    Java 的?Optional是 Java 8 引入的一個容器類,旨在更優(yōu)雅地處理可能為?null的值,避免顯式的?null檢查和空指針異常(NullPointerException),這篇文章給大家介紹Java Optional介紹和用法示例解析,感興趣的朋友一起看看吧
    2025-04-04
  • maven項目中<scope>provided</scope>的作用及說明

    maven項目中<scope>provided</scope>的作用及說明

    這篇文章主要介紹了maven項目中<scope>provided</scope>的作用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

长垣县| 个旧市| 正镶白旗| 通道| 鄂州市| 桃园县| 棋牌| 东海县| 茂名市| 正宁县| 门头沟区| 新密市| 北宁市| 宜兴市| 泗洪县| 淳安县| 西丰县| 巴林右旗| 鞍山市| 喀喇沁旗| 繁峙县| 罗城| 乃东县| 拉萨市| 汉阴县| 鹤庆县| 九台市| 尖扎县| 修武县| 克东县| 斗六市| 林州市| 肃南| 商水县| 天镇县| 长武县| 清徐县| 绵竹市| 信阳市| 彭阳县| 亳州市|