实体类 @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设置的值 > 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

实体类 @TableName&@TableField&@Version的更多相关文章
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- mybatis根据表逆向自动化生成代码(自动生成实体类、mapper文件、mapper.xml文件)
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- MP实战系列(三)之实体类讲解
首先说一句,mybatis plus实在太好用了! mybaits plus的实体类: 以我博客的用户类作为讲解 package com.blog.entity; import com.baomido ...
- mysql mybatis-generator plugin 有page实体类的分页
page实体类 package cn.zsmy.tmp; import java.io.Serializable; /** * 分页对象. * */public final class Page im ...
- DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架
引言:DDD的困惑 最近,我看到园子里面有位朋友的一篇博客 <领域驱动设计系列(一):为何要领域驱动设计? >文章中有下面一段话,对DDD使用产生的疑问: •没有正确的使用ORM, 导致数 ...
- 使用MyBatis的Generator自动创建实体类和dao的接口与xml
在实际的项目中其实建立数据库和设计数据库的时候特别重要,而等数据库设计完成之后,根据数据库创建实体类的工作就特别麻烦和繁琐了,不仅很麻烦,而且很浪费时间,不做又不行,这次就找到了一个简单的方法可以让m ...
- Mybatis自动生成实体类和实体映射工具
Mybatis Mysql生成实体类 用到的Lib包: mybatis-generator-core-1.3.2.jarmysql-connector-java-5.1.30.jar 1. 创建一个文 ...
- [NewLife.XCode]实体类详解
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含 ...
- 自动生成实体类和xml
1 首先eclipse需要安装一个插件 2 两个配置文件 1 generator.properties 2 generator.xml <?xml version="1.0" ...
随机推荐
- spring mvc 的配置 及interceptor filter listener servlet 配置
创建 三个类 分别实现 Filter ServletContextListener HttpServlet 在springboot 启动类中@bean加入 2 ,实现 ServletContext ...
- Devexpress WinForm TreeList的三种数据绑定方式(DataSource绑定、AppendNode添加节点、VirtualTreeGetChildNodes(虚拟树加载模式))
第一种:DataSource绑定,这种绑定方式需要设置TreeList的ParentFieldName和KeyFieldName两个属性,这里需要注意的是KeyFieldName的值必须是唯一的. 代 ...
- 解决go mod或go get时`x509: certificate signed by unknown authority`错误
一般go get私有仓库时会出现如下错误: go: xxx@v0.0.0-20190918102752-bb51b27911ca: unrecognized import path "xxx ...
- SQL连接(join)
INNER JOIN:如果表中有至少一个匹配,则返回行 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行 FULL JOIN ...
- [转载]IMDB文件格式
[转载]IMDB文件格式 来源:LMDB的全称是Lightning Memory-Mapped Database,闪电般的内存映射数据库.它文件结构简单,一个文件夹,里面一个数据文件,一个锁文件.数据 ...
- Vector , list 和 deque的区别
vector 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector 的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低. deque 也表示一段连续的内存区 ...
- echarts 内存泄漏
最近使用vue + Echarts 实现vue项目的数据可视化功能的时候,在ios环境下,点击列表页进入详情页几次就白屏了. 感觉白屏的原因是:echarts频繁初始化画图时候有内存泄漏,吃掉了所有内 ...
- python打印菱形
1.分析:首先python,我们分析了菱形的成分.双喜鸟seo输入2时,打印三行菱形:输入3时,打印五行菱形.也就是说,根据输入数字A,打印第2a-1行的菱形.菱形由一个三角形和一个倒三角形组成,两个 ...
- Golang之初探
什么是Go语言 Go语言介绍 产生背景: 超级复杂的C++11特性的吹捧报告的鄙视以及最终的目标是具备动态语言的开发速度的同时并要有C/C++编译语言的性能与安全性以及设计网络和多核时代的C语言 Go ...
- openresty获取nginx中的变量
在OpenResty中如何引用这些变量呢? 规则很简单, 如$remote_addr, 在OpenResty里面使用就是ngx.var.remote_adddr.