欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MybatisPlus中@TableField注解的使用詳解

 更新時間:2020年09月08日 11:55:28   作者:BADAO_LIUMANG_QIZHI  
這篇文章主要介紹了MybatisPlus中@TableField注解的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

實現(xiàn)

官方文檔說明:

com.baomidou.mybatisplus.annotations.TableField

TableField注解新增屬性 update 預處理 set 字段自定義注入

(講解:比如我們使用mybatisplus自帶的insert()方法向數(shù)據(jù)庫插入數(shù)據(jù)時,假設我們給age字段賦值為1,但是我們在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到數(shù)據(jù)庫的值就是age=2,而不是age+1了)

例如: @TableField(.. , update="%s+1") 其中 %s 會填充為字段
輸出 SQL 為:update 表 set 字段=字段+1 where ...

如果給某個字段上@TableField注解里面寫update=“now()”,那么最后我們使用mybatisplus自帶的insert()方法向數(shù)據(jù)庫插入數(shù)據(jù)時,這個字段插入到數(shù)據(jù)庫中的值就為當前時間,看下面代碼的sql語句即可明白

例如: @TableField(.. , update="now()") 使用數(shù)據(jù)庫時間
輸出 SQL 為:update 表 set 字段=now() where ...

TableField 注解新增屬性 condition 預處理 WHERE 實體條件自定義運算規(guī)則,下面會有代碼講解

@TableField(condition = SqlCondition.LIKE)
private String name;
輸出 SQL 為:select 表 where name LIKE CONCAT('%',值,'%')

講解:舉個例子來說明@TableField(condition = SqlCondition.LIKE)的作用

@Data
@TableName("admin_role")
public class RoleDO extends Model<RoleDO> {
 
  /**
   * 角色ID
   */
  @TableId(type = IdType.AUTO)
  private Long id;
 
  /**
   * 角色名稱
   */
  @TableField(condition = SqlCondition.LIKE)
  private String name;
 
  /**
   * 角色描述
   */
  private String description;
 
  /**
   * 是否啟用:0-不可用,1-可用
   */
  private Boolean enabled;
 
  /**
   * 刪除標示:0-未刪除,1-已刪除
   */
  @TableLogic
  private Boolean deleted;
 
  /**
   * 創(chuàng)建人ID
   */
  protected Long creatorId;
 
  /**
   * 創(chuàng)建人
   */
  protected String creator;
 
  /**
   * 創(chuàng)建時間
   */
  @SuppressFBWarnings("EI_EXPOSE_REP")
  protected Date dateCreated;
 
  /**
   * 修改人ID
   */
  protected Long modifierId;
 
  /**
   * 修改人
   */
  protected String modifier;
 
  /**
   * 更新時間
   */
  @SuppressFBWarnings("EI_EXPOSE_REP")
  protected Date lastModified;
 
  /** 指定主鍵 */
  @Override
  protected Serializable pkVal() {
    return this.id;
  }
}

我們通過直接給EntityWrapper對象傳入RoleDO實體類來構(gòu)造EntityWrapper,, EntityWrapper eWrapper = new EntityWrapper(roleDO); (代碼如下)

/**
   * 查詢角色列表(分頁)
   *
   * @param roleParam 角色參數(shù)
   * @return 查詢角色分頁列表
   */
  public Page<RoleDO> selectListPage(ListRoleParam roleParam) {
    RoleDO roleDO = new RoleDO();
    BeanUtils.copyProperties(roleParam, roleDO);
    Page<RoleDO> page = new Page<RoleDO>((int)roleParam.getPi(), (int)roleParam.getPs()); //得到分頁的信息
    EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO);//構(gòu)建條件查詢對象
    Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);//這里使用的就是Model提供的AR
    return roleDOList;
  }

而對于name這樣的字段在日常查詢中往往是通過like方式來進行匹配的而非精確匹配,所以此處通過@TableField(condition = SqlCondition.LIKE)來實現(xiàn)動態(tài)組合查詢條件,會根據(jù)前臺傳入的參數(shù)自動組合查詢語句并進行分頁。

字段填充策略 FieldFill

講解如下:

實體類中有如下屬性,通過上面的自動填充屬性,我們可以實現(xiàn)在進行插入(insert)操作時對添加了注解@TableField(fill = FieldFill.INSERT)的字段進行自動填充(解釋:后面會寫配置自動填充的配置類,該配置類的作用用于配置自動填充的值)。

對添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在進行插入(insert)和更新(update)時進行自動填充。(解釋:后面會寫配置自動填充的配置類,該配置類的作用用于配置自動填充的值)。

/**
   * 創(chuàng)建人
   */
  @TableField(fill = FieldFill.INSERT)
  private Long creatorId;
 
  /**
   * 創(chuàng)建時間
   */
  @TableField(fill = FieldFill.INSERT)
  private Date gmtCreat;
 
  /**
   * 修改人
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Long modifierId;
 
  /**
   * 修改時間
   */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Date gmtModified;
 
  /**
   * 是否可用
   */
  @TableField(fill = FieldFill.INSERT)
  private Boolean availableFlag;

這樣我們在具體業(yè)務中對實體類進行賦值就可以不用對這些公共字段進行賦值,在執(zhí)行插入或者更新時就能自動賦值并插入數(shù)據(jù)庫。

那么要自動賦的值在哪里配置?
在項目的config包下新建自動填充處理類使其實現(xiàn)接口MetaObjectHandler,接下來我們來寫自動賦值的配置類,并重寫其方法:

package com.ws.api.config;
 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
/**
 * 自動填充處理類
 * @author badao
 * @version 1.0
 * @see
 **/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
 
 
  @Override  //在執(zhí)行mybatisPlus的insert()時,為我們自動給某些字段填充值,這樣的話,我們就不需要手動給insert()里的實體類賦值了
  public void insertFill(MetaObject metaObject) {
  //其中方法參數(shù)中第一個是前面自動填充所對應的字段,第二個是要自動填充的值。第三個是指定實體類的對象
    this.setFieldValByName("modifierId", new Long(111), metaObject);
    this.setFieldValByName("gmtModified", new Date(), metaObject);
    this.setFieldValByName("creatorId", new Long(111), metaObject);
    this.setFieldValByName("gmtCreat",new Date(), metaObject);
    this.setFieldValByName("availableFlag",true, metaObject);
   
 
  }
 
  @Override//在執(zhí)行mybatisPlus的update()時,為我們自動給某些字段填充值,這樣的話,我們就不需要手動給update()里的實體類賦值了
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("modifierId", new Long(111), metaObject);
    this.setFieldValByName("gmtModified", new Date(), metaObject);
  }
}

到此,@TableField完成字段自動填充的內(nèi)容就講完了

接下來我們來看@TableField(exist=false)的作用

比如在實體類中有一個屬性為remark,但是在數(shù)據(jù)庫中沒有這個字段,但是在執(zhí)行插入操作時給實體類的remark屬性賦值了,那么可以通過在實體類的remark屬性上添加

@TableField(exist=false)
 private String remark;

就不會報錯了。

到此這篇關(guān)于MybatisPlus中@TableField注解的使用詳解的文章就介紹到這了,更多相關(guān)MybatisPlus @TableField注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Bean如何實現(xiàn)自動配置代碼實例

    Spring Bean如何實現(xiàn)自動配置代碼實例

    這篇文章主要介紹了Spring Bean如何實現(xiàn)自動配置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java中GC與四種引用的關(guān)系詳解

    Java中GC與四種引用的關(guān)系詳解

    這篇文章主要介紹了Java中GC與四種引用的關(guān)系詳解,Java 中一共有 4 種類型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference這 4 種類型的引用與 GC 有著密切的關(guān)系, 讓我們逐一來看它們的定義和使用場景,需要的朋友可以參考下
    2023-09-09
  • 一篇文章教你使用枚舉來實現(xiàn)java單例模式

    一篇文章教你使用枚舉來實現(xiàn)java單例模式

    本篇文章主要介紹了Java實現(xiàn)單例的3種普遍的模式,餓漢式、懶漢式、枚舉式。具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • 如何避免Apache?Beanutils屬性copy

    如何避免Apache?Beanutils屬性copy

    這篇文章主要為大家介紹了如何避免Apache?Beanutils屬性copy的分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • springboot使用redis緩存亂碼(key或者value亂碼)的解決

    springboot使用redis緩存亂碼(key或者value亂碼)的解決

    在通過springboot緩存數(shù)據(jù)的時候,發(fā)現(xiàn)key是一堆很不友好的東西,本文主要介紹了springboot使用redis緩存亂碼(key或者value亂碼)的解決,感興趣的可以了解一下
    2023-11-11
  • 讓JPA的Query查詢接口返回Map對象的方法

    讓JPA的Query查詢接口返回Map對象的方法

    下面小編就為大家分享一篇讓JPA的Query查詢接口返回Map對象的方法,具有很的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java如何獲取@TableField,@TableName注解的值

    Java如何獲取@TableField,@TableName注解的值

    這篇文章主要介紹了Java如何獲取@TableField,@TableName注解的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java中Redisson的看門狗機制的實現(xiàn)

    java中Redisson的看門狗機制的實現(xiàn)

    本文主要介紹了java中Redisson的看門狗機制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Mybatis CachingExecutor二級緩存使用示例詳解

    Mybatis CachingExecutor二級緩存使用示例詳解

    這篇文章主要介紹了?Mybatis的CachingExecutor與二級緩存使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • SpringCloud?Ribbon負載均衡原理

    SpringCloud?Ribbon負載均衡原理

    這篇文章主要介紹了SpringCloud?Ribbon負載均衡原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的朋友可以參考一下
    2022-09-09

最新評論