转自:https://www.cnblogs.com/dianzan/p/11181144.html

 

//指向表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
复制代码

 

实体类 @TableName&@TableField&@Version

 
 
posted on 2020-09-21 14:48  Sharpest  阅读(743)  评论(0编辑  收藏  举报