實體類 @TableName&@TableField&@Version


//指向表table_biao
@TableName("table_biao)
public class UserThirdLogin extends Model<UserThirdLogin>{
private static final long serialVersionUID = 1L;

//指向表中的id
 @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用戶的id */
//指向表中user_id字段,點表中的字段與所使用的字段不一樣時使用,比如user_id(表)和userId(用) @TableField("user_id") private Integer userId; /** * 昵稱 */
@TableField(value="create_date", fill = FieldFill.INSERT)
protected Date createDate
 
@TableName("p_user_bill")
public class UserBill extends Model<UserBill> {

//關於serialVersionUID的解釋
//serialVersionUID作用: 序列化時為了保持版本的兼容性,即在版本升級時反序列化仍保持對象的唯一性。
//你可以隨便寫一個,在Eclipse中它替你生成一個,有兩種生成方式: 一個是默認的1L,比如:private static final long serialVersionUID = 1L;
//一個是根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段,
//比如:private static final long serialVersionUID = -8940196742313994740L;之類的。
private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) //可不寫,但建議寫 private Integer id; /** * 用戶的id */ @TableField("user_id") private Integer userId; /** * 訂單id */ @TableField("order_id") private Integer orderId; /** * 費用類型,1:銷售提成;2:物流費用;3:安裝服務費;4:預約服務費;5:訂單服務佣金;6:訂單收入;7:訂單成本 */ @TableField("fee_type") private Integer feeType; /** * 賬單類型(支出1,收入0) */
    private String type; /** * 賬單金額 */
    private BigDecimal money; /**

https://zhidao.baidu.com/question/428013630.html

 hhttps://blog.csdn.net/tianmaxingkonger/article/details/84851206(copy

import java.util.Date;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.Version;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.baomidou.mybatisplus.enums.IdType;
 
/**
 * ClassName: BaseEntity <br/>
 * Description: 實體類基類 <br/>
 * Date: 2018年8月27日 上午11:43:58 <br/>
 * <br/>
 * 
 * @author wsp@sunnybs.com(郵箱)
 * 
 *         修改記錄
 * @version 產品版本信息 2018-12-06 姓名(郵箱) 修改信息<br/>
 * 
 */
@SuppressWarnings("rawtypes")
public abstract class BaseEntity<T extends Model> extends Model {
 
    private static final long serialVersionUID = 1L;
 
 
    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    protected Long id;
    
    @TableField(value="create_date", fill = FieldFill.INSERT)
    protected Date createDate;
    
    /**
     * 更新日期<br>
     * @TableField注解說明:<br>
     * 
     * <h1>1、value屬性:</h1>
     * 生成sql時,實體屬性(例如modifyDate)對應數據庫表的列名(表字段,例如modify_date)。<br>
     * 
     * <h1>2、fill屬性:</h1>
     * 指定數據庫表的字段的填充策略,各枚舉值含義請自己看源碼。<br>
     * 配置該屬性,在執行insert、update等SQL時,如果策略匹配成功,就會在生成的SQL中自動追加新增、更新該字段的內容,<br>
     * 並且該字段的取值會通過MetaObjectHandler類的insertFill、updateFill等對應方法中的設置進行賦值。<br>
     * 如果通過該填充策略給數據庫表字段自動填充值時,必須自己實現MetaObjectHandler抽象類,並注冊到mybatis的全局配置中去。<br>
     * 請參考mybatis-plug自動填充功能:{@link https://mp.baomidou.com/guide/auto-fill-metainfo.html}<br>
     * springBoot的配置:{@link https://www.cnblogs.com/lqtbk/p/9843401.html}<br>
     * 本項目中MetaObjectHandler的實現類未:{@link com.stylefeng.guns.core.handler.ModelMetaObjectHandler}<br>
     * <b>注意:</b><br>
     * 如果該注解同時設置了“update屬性”(見下),且fill屬性取值為UPDATE或INSERT_UPDATE,那么fill屬性優先級高於update屬性,會導致設置的update屬性策略失效!!!<br>
     * 
     * <h1>3、update屬性:</h1>
     * 對實體進行update操作時,生成的update SQL,會注入該字段的更新。<br>
     * 例如:<br>
     * update="NOW()",則生成的SQL中會含“update ... set ..., modify_date = NOW()”<br>
     * update="%s+1",則生成的SQL中會含“update ... set ..., version = version + 1<br>
     * <b>注意:</b><br>
     * 如果該注解同時設置了“fill屬性”(見上),且fill屬性取值為UPDATE或INSERT_UPDATE,那么fill屬性優先級高於update屬性,會導致設置的update屬性策略失效!!!<br>
     * 
     * <h1>優先級總結:</h1>
     * 實體屬性更新到數據庫時,屬性值來源的優先級:實體類對象setter設置的值 &gt; fill策略填充的值 &gt; update策略SQL注入的值。<br>
     * <b>注意:</b><br>
     * setter優先級和fill策略優先級,是在MetaObjectHandler中自己手動實現的。
     */
    @TableField(value="modify_date", fill = FieldFill.INSERT, update="NOW()")
    protected Date modifyDate;
 
    /**
     * @Version注解說明:<br>
     * 更新時,實體對象的version屬性必須有值,才會生成SQL update ... WHERE ... and version=?
     */
    @Version
    @TableField(value="version", fill = FieldFill.INSERT, update="%s+1")
    protected Long version;
 
}
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
 
/**
 * <p>
 * 默認填充器關閉操作
 * </p>
 *
 * @author wsp@sunnybscom
 * @since 2018-12-05
 */
public class ModelMetaObjectHandler extends MetaObjectHandler {
 
    /**
     * metaObject是頁面傳遞過來的參數的包裝對象,不是從數據庫取的持久化對象,因此頁面傳過來哪些值,metaObject里就有哪些值。
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        Date now = new Date();
        Object createDate = this.getFieldValByName("createDate", metaObject);
        if(null == createDate){
            /**
             * 設置實體屬性setter進去的值,優先級要高於自動填充的值。
             * 如果實體沒有設置該屬性,就給默認值,防止entity的setter值被覆蓋。
             */
            this.setFieldValByName("createDate", now, metaObject);
        }
        Object modifyDate = this.getFieldValByName("modifyDate", metaObject);
        if(null == modifyDate){
            this.setFieldValByName("modifyDate", now, metaObject);
        }
        Object version = this.getFieldValByName("version", metaObject);
        if(null == version){
            this.setFieldValByName("version", 0L, metaObject);
        }
    }
    
    @Override
    public void updateFill(MetaObject metaObject) {
    }
}
#Spring Boot application.yml
 
mybatis-plus:
  typeAliasesPackage: com.stylefeng.guns.modular.system.model
  # 枚舉屬性自動轉換,支持統配符 * 或者 ; 分割
  typeEnumsPackage: com.stylefeng.guns.modular.*.model.enums
  #自定義填充策略接口實現
  global-config.meta-object-handler: com.stylefeng.guns.core.handler.ModelMetaObjectHandler

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM