- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MybatisPlus中@TableField注解的使用详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
实现 。
官方文档说明:
com.baomidou.mybatisplus.annotations.TableField 。
TableField注解新增属性 update 预处理 set 字段自定义注入 。
(讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了) 。
例如: @TableField(.. , update="%s+1") 其中 %s 会填充为字段 输出 SQL 为:update 表 set 字段=字段+1 where ... 。
如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白 。
例如: @TableField(.. , update="now()") 使用数据库时间 输出 SQL 为:update 表 set 字段=now() where ... 。
TableField 注解新增属性 condition 预处理 WHERE 实体条件自定义运算规则,下面会有代码讲解 。
1
2
3
|
@TableField
(condition = SqlCondition.LIKE)
private
String name;
输出 SQL 为:select 表 where name LIKE CONCAT(
'%'
,值,
'%'
)
|
讲解:举个例子来说明@TableField(condition = SqlCondition.LIKE)的作用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
@Data
@TableName
(
"admin_role"
)
public
class
RoleDO
extends
Model<RoleDO> {
/**
* 角色ID
*/
@TableId
(type = IdType.AUTO)
private
Long id;
/**
* 角色名称
*/
@TableField
(condition = SqlCondition.LIKE)
private
String name;
/**
* 角色描述
*/
private
String description;
/**
* 是否启用:0-不可用,1-可用
*/
private
Boolean enabled;
/**
* 删除标示:0-未删除,1-已删除
*/
@TableLogic
private
Boolean deleted;
/**
* 创建人ID
*/
protected
Long creatorId;
/**
* 创建人
*/
protected
String creator;
/**
* 创建时间
*/
@SuppressFBWarnings
(
"EI_EXPOSE_REP"
)
protected
Date dateCreated;
/**
* 修改人ID
*/
protected
Long modifierId;
/**
* 修改人
*/
protected
String modifier;
/**
* 更新时间
*/
@SuppressFBWarnings
(
"EI_EXPOSE_REP"
)
protected
Date lastModified;
/** 指定主键 */
@Override
protected
Serializable pkVal() {
return
this
.id;
}
}
|
我们通过直接给EntityWrapper对象传入RoleDO实体类来构造EntityWrapper,, EntityWrapper eWrapper = new EntityWrapper(roleDO); (代码如下) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* 查询角色列表(分页)
*
* @param roleParam 角色参数
* @return 查询角色分页列表
*/
public
Page<RoleDO> selectListPage(ListRoleParam roleParam) {
RoleDO roleDO =
new
RoleDO();
BeanUtils.copyProperties(roleParam, roleDO);
Page<RoleDO> page =
new
Page<RoleDO>((
int
)roleParam.getPi(), (
int
)roleParam.getPs());
//得到分页的信息
EntityWrapper<RoleDO> eWrapper =
new
EntityWrapper<RoleDO>(roleDO);
//构建条件查询对象
Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);
//这里使用的就是Model提供的AR
return
roleDOList;
}
|
而对于name这样的字段在日常查询中往往是通过like方式来进行匹配的而非精确匹配,所以此处通过@TableField(condition = SqlCondition.LIKE)来实现动态组合查询条件,会根据前台传入的参数自动组合查询语句并进行分页.
字段填充策略 FieldFill 。
讲解如下:
实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值).
对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/**
* 创建人
*/
@TableField
(fill = FieldFill.INSERT)
private
Long creatorId;
/**
* 创建时间
*/
@TableField
(fill = FieldFill.INSERT)
private
Date gmtCreat;
/**
* 修改人
*/
@TableField
(fill = FieldFill.INSERT_UPDATE)
private
Long modifierId;
/**
* 修改时间
*/
@TableField
(fill = FieldFill.INSERT_UPDATE)
private
Date gmtModified;
/**
* 是否可用
*/
@TableField
(fill = FieldFill.INSERT)
private
Boolean availableFlag;
|
这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库.
那么要自动赋的值在哪里配置? 在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package
com.ws.api.config;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import
org.apache.ibatis.reflection.MetaObject;
import
org.springframework.stereotype.Component;
import
java.util.Date;
/**
* 自动填充处理类
* @author badao
* @version 1.0
* @see
**/
@Component
public
class
MyMetaObjectHandler
implements
MetaObjectHandler {
@Override
//在执行mybatisPlus的insert()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给insert()里的实体类赋值了
public
void
insertFill(MetaObject metaObject) {
//其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。第三个是指定实体类的对象
this
.setFieldValByName(
"modifierId"
,
new
Long(
111
), metaObject);
this
.setFieldValByName(
"gmtModified"
,
new
Date(), metaObject);
this
.setFieldValByName(
"creatorId"
,
new
Long(
111
), metaObject);
this
.setFieldValByName(
"gmtCreat"
,
new
Date(), metaObject);
this
.setFieldValByName(
"availableFlag"
,
true
, metaObject);
}
@Override
//在执行mybatisPlus的update()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给update()里的实体类赋值了
public
void
updateFill(MetaObject metaObject) {
this
.setFieldValByName(
"modifierId"
,
new
Long(
111
), metaObject);
this
.setFieldValByName(
"gmtModified"
,
new
Date(), metaObject);
}
}
|
到此,@TableField完成字段自动填充的内容就讲完了 。
接下来我们来看@TableField(exist=false)的作用 。
比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加 。
1
2
|
@TableField
(exist=
false
)
private
String remark;
|
就不会报错了.
到此这篇关于MybatisPlus中@TableField注解的使用详解的文章就介绍到这了,更多相关MybatisPlus @TableField注解内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89425635 。
最后此篇关于MybatisPlus中@TableField注解的使用详解的文章就讲到这里了,如果你想了解更多关于MybatisPlus中@TableField注解的使用详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等,这里使用LXC的网络虚拟化来模拟多个网络环境。 本文从基本的网络设备讲
? 1
我是一名优秀的程序员,十分优秀!