亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

1. MyBatis-Plus 實(shí)體類注解概覽

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

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

2. @TableName 注解

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

使用示例

import com.baomidou.mybatisplus.annotation.TableName;

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

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

常用屬性

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

3. @TableId 注解

@TableId 用于指定表的主鍵列,并可以設(shè)置主鍵的生成策略。常見的生成策略有自動(dòng)遞增(AUTO)、手動(dòng)分配(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 字段被標(biāo)記為主鍵,并且使用了自動(dòng)遞增策略。

常用屬性

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

4. @TableField 注解

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

使用示例

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ù)庫(kù)字段
}

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

常用屬性

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

5. @TableLogic 注解

@TableLogic 用于實(shí)現(xiàn)邏輯刪除功能。邏輯刪除是在數(shù)據(jù)表中不真正刪除記錄,而是通過(guò)標(biāo)記某個(gè)字段(如 is_deleted)來(lái)表示數(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 字段用于標(biāo)記該記錄是否被刪除。當(dāng)使用 MyBatis-Plus 提供的刪除方法(如 deleteById)時(shí),實(shí)際上會(huì)更新 isDeleted 字段的值,而不是物理刪除該記錄。

默認(rèn)行為

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

自定義邏輯刪除值

如果邏輯刪除標(biāo)記的值不為 0 和 1,可以通過(guò)全局配置進(jìn)行自定義。

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

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

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

使用示例

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 字段會(huì)在插入時(shí)自動(dòng)填充。
  • updatedAt 字段會(huì)在插入和更新時(shí)自動(dòng)填充。

自動(dòng)填充實(shí)現(xiàn)步驟

  • 定義實(shí)體類字段并加上 @TableField(fill = ...) 注解。
  • 創(chuàng)建自動(dòng)填充處理器:實(shí)現(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 注解用于實(shí)現(xiàn)樂觀鎖。在并發(fā)環(huán)境下,樂觀鎖可以防止數(shù)據(jù)的“臟寫”,通過(guò)版本號(hào)(version)字段來(lái)保證數(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;  // 樂觀鎖版本號(hào)
}

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

8. 綜合示例

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

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ù)庫(kù)的 user_name 列。
  • isDeleted 實(shí)現(xiàn)邏輯刪除。
  • createdAt 和 updatedAt 實(shí)現(xiàn)自動(dòng)填充。
  • version 用于實(shí)現(xiàn)樂觀鎖。

9. 總結(jié)

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

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

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

相關(guān)文章

  • JavaFX實(shí)現(xiàn)石頭剪刀布小游戲

    JavaFX實(shí)現(xiàn)石頭剪刀布小游戲

    這篇文章主要為大家詳細(xì)介紹了JavaFX實(shí)現(xiàn)石頭剪刀布小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 聊聊Java中的Native修飾符

    聊聊Java中的Native修飾符

    這篇文章主要介紹了Java中的Native修飾符使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法

    Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法

    這篇文章主要介紹了Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • JDK8時(shí)間相關(guān)類超詳細(xì)總結(jié)(含多個(gè)實(shí)例)

    JDK8時(shí)間相關(guān)類超詳細(xì)總結(jié)(含多個(gè)實(shí)例)

    jdk1.8的一些新特性簡(jiǎn)化了代碼的寫法,減少了部分開發(fā)量,下面這篇文章主要給大家介紹了關(guān)于JDK8時(shí)間相關(guān)類超詳細(xì)總結(jié),文中包含了多個(gè)實(shí)例代碼,需要的朋友可以參考下
    2023-01-01
  • java使用Abobe Acrobat DC生成模板

    java使用Abobe Acrobat DC生成模板

    這篇文章主要介紹了java使用Abobe Acrobat DC生成模板,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用

    Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java、JavaScript、Oracle、MySQL中實(shí)現(xiàn)的MD5加密算法分享

    Java、JavaScript、Oracle、MySQL中實(shí)現(xiàn)的MD5加密算法分享

    這篇文章主要介紹了Java、JavaScript、Oracle、MySQL中實(shí)現(xiàn)的MD5加密算法分享,需要的朋友可以參考下
    2014-09-09
  • Java并發(fā)編程之重入鎖與讀寫鎖

    Java并發(fā)編程之重入鎖與讀寫鎖

    這篇文章主要介紹了Java并發(fā)編程之重入鎖與讀寫鎖,文中相關(guān)實(shí)例代碼詳細(xì),測(cè)試可用,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • Java對(duì)象Serializable接口實(shí)現(xiàn)詳解

    Java對(duì)象Serializable接口實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java對(duì)象Serializable接口實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot項(xiàng)目如何打war包問題詳解

    SpringBoot項(xiàng)目如何打war包問題詳解

    傳統(tǒng)的部署方式:將項(xiàng)目打成war包,放入tomcat的webapps目錄下面,啟動(dòng)tomcat,即可訪問.文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)springboot的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論