//指向表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設置的值 > fill策略填充的值 > 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