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

使用Mybatis-Plus實現(xiàn)對象屬性自動填充功能

 更新時間:2024年01月22日 10:33:32   作者:夜郎king  
這篇文章主要介紹了如何使用Mybatis-Plus實現(xiàn)對象屬性自動填充功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,感興趣的朋友們下面隨著小編來一起來學習吧

案例場景:在設計一張數(shù)據(jù)庫表的時候,通常會包含下列信息:createBy(創(chuàng)建人)、createTime(創(chuàng)建時間)、updateBy(修改人)、updateTime(修改時間)、otherinfo(其它屬性信息)。

在一般的業(yè)務邏輯編寫過程中,絕大多數(shù)的開發(fā)工程師都選擇根據(jù)操作類型(insert/update)來依次調用對應的setXXX方法來設置值。使用setXXX并不是不能達到預期,只是代碼實現(xiàn)起來不叫臃腫,而這些字段幾乎是通用的字段,是否有統(tǒng)一的方式進行設置呢?

下面以實例的方式告訴大家,如何基于Mybatis-Plus實現(xiàn)固定列自動填充,讓你的工作效率提升。

1、引用Mybatis-plus

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.6</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2、自定義自己的原對象屬性填充器,自定義類實現(xiàn)MetaObjectHandler,代碼如下:

/**   
 * Copyright ? 2019 DBRG. All rights reserved.
 * 
 * @Title: DbrgMetaObjectHandler.java 
 * @Prject: syswms
 * @Package: com.dbrg.project.handler 
 * @version: V1.0   
 */
package com.dbrg.project.handler;
 
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.dbrg.common.utils.DateUtils;
import com.dbrg.common.utils.security.ShiroUtils;
 
/** 
 * @ClassName: DbrgMetaObjectHandler 
 * @Description:元對象自動填充處理器
 * @author: yelangking
 * @date: 2019年3月4日 上午9:14:18  
 */
@Component
public class DbrgMetaObjectHandler implements MetaObjectHandler{
  private static final String CREATE_BY_FIELD_NAME = "createBy";
  private static final String CREATE_TIME_FIELD_NAME = "createTime";
  private static final String UPDATE_BY_FIELD_NAME = "updateBy";
  private static final String UPDATE_TIME_FIELD_NAME = "updateTime";
 
  /* (non Javadoc) 
   * @Title: insertFill
   * @Description: {簡單描述}
   * @param arg0 
   * @see com.baomidou.mybatisplus.core.handlers.MetaObjectHandler#insertFill(org.apache.ibatis.reflection.MetaObject) 
   */
  @Override
  public void insertFill(MetaObject metaObject) {
    //1、自動設置創(chuàng)建人信息,當外部接口調用時,用戶可能為空
    if(null != ShiroUtils.getSysUser()){
      this.setFieldValByName(CREATE_BY_FIELD_NAME,ShiroUtils.getUserId(),metaObject);
    }
    //2、自動設置創(chuàng)建時間
    this.setFieldValByName(CREATE_TIME_FIELD_NAME, DateUtils.getNowDate(), metaObject);
    //3、自動設置更新人信息,當外部接口調用時,用戶可能為空
    if(null != ShiroUtils.getSysUser()){
      this.setFieldValByName(UPDATE_BY_FIELD_NAME,ShiroUtils.getUserId(),metaObject);
    }
    //4、自動設置更新時間
    this.setFieldValByName(UPDATE_TIME_FIELD_NAME, DateUtils.getNowDate(), metaObject);
  }
 
  /* (non Javadoc) 
   * @Title: updateFill
   * @Description: {簡單描述}
   * @param arg0 
   * @see com.baomidou.mybatisplus.core.handlers.MetaObjectHandler#updateFill(org.apache.ibatis.reflection.MetaObject) 
   */
  @Override
  public void updateFill(MetaObject metaObject) {
    //1、自動設置更新人信息,當外部接口調用時,用戶可能為空
    if(null != ShiroUtils.getSysUser()){
      this.setFieldValByName(UPDATE_BY_FIELD_NAME,ShiroUtils.getUserId(),metaObject);
    }
    //2、自動設置更新時間
    this.setFieldValByName(UPDATE_TIME_FIELD_NAME, DateUtils.getNowDate(), metaObject);
  }
}

以上代碼實現(xiàn)了自定義的設置入口,分別定義了在insert和update時設置哪些屬性的值,程序實際運行時會根據(jù)不同的操作類型設置相應的值。

3、在實體類上注入設置填充規(guī)則,代碼如下:

 
/**   
 * Copyright ? 2019 DBRG. All rights reserved.
 * 
 * @Title: MpBaseEntity.java 
 * @Prject: syswms
 * @Package: com.dbrg.framework.web.domain 
 * @version: V1.0   
 */
package com.dbrg.framework.web.domain;
 
import java.io.Serializable;
import java.util.Date;
 
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
 
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
 
/** 
 * @ClassName: MpBaseEntity 
 * @Description:mybatis plus 自動注入基類,結合FieledFill策略類一起使用,
 * 默認包含創(chuàng)建人、創(chuàng)建時間、更新人、更新時間信息,業(yè)務表單中包含此字段的集成本類即可。如無明確要求,可不做任何處理。
 * @author: yelangking
 * @date: 2019年3月4日 上午9:03:12  
 */
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class MpBaseEntity implements Serializable{
  private static final long serialVersionUID = 2234596156219712753L;
  /**
   * 創(chuàng)建人
   */
  @TableField(value="create_by",fill=FieldFill.INSERT)
  private Long createBy;
  /** 創(chuàng)建時間 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value="create_time",fill=FieldFill.INSERT)
  private Date createTime;
    /**
     * 更新人
     */
    @TableField(value="update_by",fill=FieldFill.INSERT_UPDATE)
    private Long updateBy;
    /**
     * 更新時間
     */
    @TableField(value="update_time",fill=FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}

關鍵代碼: 

@TableField(value="update_time",fill=FieldFill.INSERT_UPDATE),在對象的屬性上設置填充規(guī)則即可。

4、運行效果,參考官網(wǎng)運行結果。

c.b.samples.metainfo.AutoFillTest : Started AutoFillTest in 9.239 seconds (JVM running for 17.064)
c.b.s.m.handler.MyMetaObjectHandler: start insert fill ....
c.b.s.metainfo.mapper.UserMapper.insert: ==> Preparing: INSERT INTO user ( ID, NAME, AGE, EMAIL, OPERATOR ) VALUES ( ?, ?, ?, ?, ? )
c.b.s.metainfo.mapper.UserMapper.insert: ==> Parameters: 1381223322590720001(Long), Tom(String), 1(Integer), tom@qq.com(String), Jetty(String)
c.b.s.metainfo.mapper.UserMapper.insert: <== Updates: 1
c.b.s.m.mapper.UserMapper.selectById: ==>  Preparing: SELECT ID,NAME,AGE,EMAIL,OPERATOR FROM user WHERE ID=?
c.b.s.m.mapper.UserMapper.selectById: ==> Parameters: 1381223322590720001(Long)
c.b.s.m.mapper.UserMapper.selectById: <== Total: 1
c.b.samples.metainfo.AutoFillTest: query user:User(id=1381223322590720001, name=Tom, age=1, email=tom@qq.com, operator=Jetty)
c.b.s.m.mapper.UserMapper.selectById: ==> Preparing: SELECT ID,NAME,AGE,EMAIL,OPERATOR FROM user WHERE ID=?
c.b.s.m.mapper.UserMapper.selectById: ==> Parameters: 1(Long)
c.b.s.m.mapper.UserMapper.selectById: <== Total: 1
c.b.samples.metainfo.AutoFillTest: before user:User(id=1, name=Jone, age=18, email=test1@baomidou.com, operator=test)
c.b.s.m.handler.MyMetaObjectHandler : start update fill ....
c.b.s.m.mapper.UserMapper.updateById: ==> Preparing: UPDATE user SET NAME=?, AGE=?, EMAIL=?, OPERATOR=? WHERE ID=?
c.b.s.m.mapper.UserMapper.updateById: ==> Parameters: Jone(String), 12(Integer), test1@baomidou.com(String), test(String), 1(Long)
c.b.s.m.mapper.UserMapper.updateById: <==   Updates: 1

5、綜上所述,使用mybatis-plus可以方便快速的進行屬性自動填充,最大量的減輕大家的工作量,在你的項目中大膽采用吧,提升開發(fā)效率。歡迎添加公眾號交流。

以上就是使用Mybatis-Plus實現(xiàn)對象屬性自動填充功能的詳細內容,更多關于Mybatis-Plus對象屬性自動填充的資料請關注腳本之家其它相關文章!

相關文章

  • mybatis-plus實現(xiàn)打印完整sql語句

    mybatis-plus實現(xiàn)打印完整sql語句

    這篇文章主要介紹了mybatis-plus實現(xiàn)打印完整sql語句方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • IDEA加載項目沒有src目錄的問題及解決

    IDEA加載項目沒有src目錄的問題及解決

    這篇文章主要介紹了IDEA加載項目沒有src目錄的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java集合系列之ArrayList源碼分析

    Java集合系列之ArrayList源碼分析

    這篇文章主要為大家詳細介紹了Java集合系列之ArrayList源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解
    2013-04-04
  • 在SpringBoot框架下實現(xiàn)Excel導入導出的方法詳解

    在SpringBoot框架下實現(xiàn)Excel導入導出的方法詳解

    SpringBoot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,今天我們就使用純前對按表格控件帶大家了解,如何在Spring Boot框架下實現(xiàn)Excel服務端導入導出,需要的朋友可以參考下
    2023-06-06
  • mybatis的動態(tài)SQL和模糊查詢實例詳解

    mybatis的動態(tài)SQL和模糊查詢實例詳解

    這篇文章主要給大家介紹了關于mybatis的動態(tài)SQL和模糊查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Javac/javap 自帶工具簡單使用講解

    Javac/javap 自帶工具簡單使用講解

    這篇文章主要介紹了Javac/javap 自帶工具簡單使用講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • PowerJob的IdGenerateService工作流程源碼解讀

    PowerJob的IdGenerateService工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的IdGenerateService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Spring Boot使用Servlet及Filter過程詳解

    Spring Boot使用Servlet及Filter過程詳解

    這篇文章主要介紹了Spring Boot使用Servlet及Filter過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Springboot定時任務Scheduled重復執(zhí)行操作

    Springboot定時任務Scheduled重復執(zhí)行操作

    這篇文章主要介紹了Springboot定時任務Scheduled重復執(zhí)行操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

桦南县| 剑川县| 林周县| 奈曼旗| 兴文县| 阿克| 涞水县| 巴林右旗| 铁力市| 巍山| 汝州市| 潮州市| 肥西县| 舟曲县| 九台市| 柳河县| 都兰县| 曲阳县| 宾阳县| 曲周县| 深水埗区| 察雅县| 祁东县| 公安县| 得荣县| 北海市| 新绛县| 巫溪县| 交城县| 古田县| 峨边| 额尔古纳市| 禄劝| 馆陶县| 托克托县| 曲阜市| 丁青县| 浑源县| 张家港市| 临沧市| 凤翔县|