作者:微信小助手
发布时间:2024-11-25T05:58:35
在这篇文章中,结合笔者在工作中使用到 Mybatis Plus 的过程中遇到的空字符串丢失的问题,谈一谈对 Mybatis Plus 的一些看法。由于项目历史问题,使用到的 Mybatis Plus 的版本如下: 我们存在如下数据库表: 对于 text 类型的 构建对应的数据库实体类: 执行插入操作: 其中我们的 excludeAccountIds 字段的值为空字符串,数据库的插入结果为: 若把 excludeAccountIds 字段上标注 可见,没有带 <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0-beta</version>
</dependency>一、问题背景
create table ad_person_send_rule
(
id bigint unsigned auto_increment
primary key,
status tinyint(3) default 1 not null comment '状态',
operator_user varchar(128) charset utf8 default '' not null comment '更新人',
account_type varchar(10) charset utf8 default '' not null comment '账户类型',
account_kinds varchar(10) charset utf8 default '' not null comment '账户性质',
include_account_ids text charset utf8 null comment '允许的账户id',
exclude_account_ids text charset utf8 null comment '排除账户id',
create_time timestamp default CURRENT_TIMESTAMP not null comment '创建时间',
update_time timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间'
)exclude_account_ids
字段,是不能设置默认值的,这是由于 MySQL 5.7 的严格模式导致的,什么都不写的话只能为空。对于业务来说,exclude_account_ids
空字符串是有意义的,所以在某些情况下,我们需要直接插入空字符串。二、Mybatis Plus 执行插入过程丢失空字符串
public class AdPersonSendRule implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = -3646240230891328158L;
@TableId(type = IdType.AUTO)
private Long id;
private Integer status;
private String operatorUser;
private String accountType;
private String accountKinds;
private String includeAccountIds;
private String excludeAccountIds;
private Date createTime;
private Date updateTime;
}public void createPersonAuditRuleTest() {
PersonAuditRuleRequest personAuditRuleRequest = new PersonAuditRuleRequest();
personAuditRuleRequest.setIncludeAccountIDs("129,240,9123,100");
// 设置为空字符串
personAuditRuleRequest.setExcludeAccountIDs("");
personAuditRuleRequest.setAccountKinds(new HashSet<>());
personAuditRuleRequest.setAccountTypes(new HashSet<>());
Result robotAuditRule = personAuditController.createPersonAuditRule(personAuditRuleRequest);
log.info("插入结果结果为:{}", JSONUtil.toJsonStr(robotAuditRule));
}
@TableField
注解后,数据库中插入结果为:
@TableField
注解时,插入空字符串对应的值为 null,而带了 @TableField
注解时,插入空字符串对应的值为空字符串,这才是我想要的结果,但是,为什么会造成�