问题描述:本地调试会拼接,服务器不会拼接 set 字段名=””
解决方法:操作实体字段加上策略:strategy = FieldStrategy.IGNORED
服务器异常日志脚本:update 表 where (bus_id = ?)
正确效果为:update 表 set 字段=”” where (bus_id = ?)
示例代码:
Wrapper<ModuleUserPo> moduleUserPoWrapper = new EntityWrapper<>();
moduleUserPoWrapper .eq("bus_id", busId);
ModuleUserPo moduleUserPo = new ModuleUserPo ();
moduleUserPo.setYjMc(cfgParam.getYj());
moduleUserPo.setJsMc(cfgParam.getFz());
moduleUserMapper.update(moduleUserPo, moduleUserPoWrapper );
/**
* <p>
* 用户实体
* </p>
*
* @author
* @since 2019-12-20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("module_user")
public class ModuleUserPo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
@TableField(value = "YJ_MC", strategy = FieldStrategy.IGNORED)
private String yjMc;
/**
* 姓名
*/
@TableField(value = "JS_MC", strategy = FieldStrategy.IGNORED)
private String jsMc;
}
附:字段策略源码
/**
* <p>
* 字段策略枚举类
* </p>
*
* @author hubin
* @Date 2016-09-09
*/
public enum FieldStrategy {
IGNORED(0, "忽略判断"),
NOT_NULL(1, "非 NULL 判断"),
NOT_EMPTY(2, "非空判断");
/**
* 主键
*/
private final int key;
/**
* 描述
*/
private final String desc;
FieldStrategy(final int key, final String desc) {
this.key = key;
this.desc = desc;
}
public static FieldStrategy getFieldStrategy(int key) {
FieldStrategy[] fss = FieldStrategy.values();
for (FieldStrategy fs : fss) {
if (fs.getKey() == key) {
return fs;
}
}
return FieldStrategy.NOT_NULL;
}
public int getKey() {
return this.key;
}
public String getDesc() {
return this.desc;
}
}
感谢查看
当使用Mybatis-plus进行数据修改时,如果传入参数为空,服务器上不会自动拼接'SET'字段。解决此问题的方法是在实体字段上设置策略为FieldStrategy.IGNORED。异常日志显示缺少'SET'部分,正确的SQL应包含'SET'关键字来更新字段。参考代码和字段策略源码可供查阅。

1032

被折叠的 条评论
为什么被折叠?



