当前位置: 首页 > news >正文

深圳优定软件网站建设今天新疆新闻头条

深圳优定软件网站建设,今天新疆新闻头条,湖南省政府网站集约化建设,网站做优化有什么用吗文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1:全局配置方式3.2 方法2:非null字段验证策略3.3 方法3:通过注解的方式4. 总结1. 文章引言 在开发的过程中,我们经常使用MyBatis-Plus的updateById方法更新数据表,…

文章目录

  • 1. 文章引言
  • 2. 分析问题
  • 3. 解决问题
    • 3.1 方法1:全局配置方式
    • 3.2 方法2:非null字段验证策略
    • 3.3 方法3:通过注解的方式
  • 4. 总结

1. 文章引言

在开发的过程中,我们经常使用MyBatis-PlusupdateById方法更新数据表,但今天在更新appConfig表时,发现无法将content字段更新为null

如下是我的测试代码:

@Test
public void testUpdateById() {Long id = 10L;AppConfig beforeAppConfig = appConfigService.getById(id);System.out.println("输出更新 前 的应用配置内容:" + beforeAppConfig.getContent());System.out.println();// 将 id = 10的应用配置的内容修改 nullbeforeAppConfig.setContent(null);appConfigService.updateById(beforeAppConfig);// 查询更新的 id = 10的应用配置的内容AppConfig afterAppConfig = appConfigService.getById(id);System.out.println("输出更新 后 的应用配置内容:"+afterAppConfig.getContent());
}

输出结果如下图所示:

在这里插入图片描述

由上图可知,更新前后输出的内容不变。

换句话说,上述此代码 beforeAppConfig.setContent(null);虽然设置contentnull,但数据库并没有将content更新为null

这是什么原因呢?

2. 分析问题

想要搞清楚没有将content更新为null原因,我们不妨看看上图中的用绿色框圈出来的MyBatis-Plus打印出的mysql语句,如下所示:

UPDATE app_config SET create_time=? WHERE id=?

你会清楚地看到,mysql语句中没有content字段。

按照预期结果,MyBatis-Plus打印出的mysql语句应该如下:

UPDATE app_config SET create_time=?, content=? WHERE id=?

为什么MyBatis-Plus没有按预期打印出的mysql语句,经过查找资料可得。

其实是MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进行了不是全量更新的策略。

查阅官网发现有一个属性,而我的application.yml没有配置这个属性,如下代码所示:

#mybatis配置
mybatis-plus:mapper-locations: classpath*:/mapper/*Mapper.xmltype-aliases-package: com.superjson.superjsonmanager.mapperconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 按下划线转驼峰规则映射数据库字段与java bean属性之间的关系map-underscore-to-camel-case: true# 关闭一级缓存# local-cache-scope: statement# 关闭二级缓存# cache-enabled: falseglobal-config:db-config:id-type: autologic-delete-value: -1logic-not-delete-value: 0

如果没有配置这个属性,那么,MyBatis-Plus采用了默认的字段验证策略。

这个属性就是field-strategy,在原application.yml中加入该属性,如下代码所示:

global-config:#字段策略 0:忽略判断,1:非NULL判断,2:非空判断field-strategy: 1db-config:id-type: autologic-delete-value: -1logic-not-delete-value: 0

field-strategy字段更新插入策略属性说明:

  1. IGNORED(0): “忽略判断”, 所有字段都更新和插入

  2. NOT_NULL(1):“非 NULL 判断”, 只更新和插入非NULL

  3. NOT_EMPTY(2):“非空判断”,只更新和插入非NULL值且非空字符串

field-strategy默认策略是NOT_NULL(1) ,即更新的时候做了null判断,默认不更新为null的传参。

3. 解决问题

既然知道了问题所在,便可以通过如下三种方式解决。

3.1 方法1:全局配置方式

MyBatis-Plus配置文件中修改field-strategy字段验证的值为0,即忽略判断,如下代码所示:

global-config:#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 0db-config:id-type: autologic-delete-value: -1logic-not-delete-value: 0

如是配置后,并参照网上说的,在PO对象(即@TableField(value="content")修饰字段的时候,还需要加入el属性,但我是新版本的MyBatis-Plus,已经不支持el属性了,如下源码所说:

在这里插入图片描述

我虽然在content对象上加上update属性,如下代码所示:

/** 配置内容 */
@TableField(value = "content",update = "null" )
private String content;

仍无法将content字段修改为null,如下图所示:

在这里插入图片描述

如果有知道的,可以在评论区中留言,不胜感激。

此外,如果你的MyBatis-Plus版本支持el。你在设置了 field-strategy: 0的前提下,同时你已确保了你的PO对象(即@TableField(value="XSID")修饰字段加入了el属性 (每个属性对应数据库的jdbcType类型,这样才能成功更新空值或null),如下图:

在这里插入图片描述

你可以采用el的这种方式修改。

3.2 方法2:非null字段验证策略

在这里插入图片描述

配置完成后,测试类修改完成,并重新启动,如下图所示:

在这里插入图片描述

此时,你会发现可以更新空字符串' ',如下图所示:

在这里插入图片描述

但是一些比如Date等对象类型的设置空是要设置为null的,你会发现一样更新不了null

3.3 方法3:通过注解的方式

由于表中的字段基本上都是varchar字符类型的,所以此时可以在PO中对类型为对象类型的属性,通过注解对对象类型的属性单独设置字段验证策略为IGNORED,如下代码所示:

/** 配置内容 */
@TableField(value = "content",updateStrategy = FieldStrategy.IGNORED)
private String content;

同时修改测试代码,如下图所示:

在这里插入图片描述

这样就可以成功更新值为null或者空字符串' '了,问题解决,如下图所示:

在这里插入图片描述

如果你的MyBatis-Plus版本和我的版本不同,你可能是下图中的注解,同样能解决问题。

在这里插入图片描述

4. 总结

如果你不是使用上述方式解决了你的问题,欢迎在评论区留言。

http://www.wooajung.com/news/32227.html

相关文章:

  • 自媒体平台网站开发营销必备十大软件
  • 网站做2微码山东关键词优化联系电话
  • 深圳集团网站开发公司厦门谷歌seo公司
  • 鞍山做网站的百度快速收录软件
  • o2o网站建设我为什么不建议年轻人做销售
  • 邢台公司做网站多少钱谷歌怎么投放广告
  • 招聘网站上还要另外做简历吗关键词调整排名软件
  • 加盟培训网站建设自己在家怎么做跨境电商
  • 哪里可以免费做网站seo是什么地方
  • 网站sem优化怎么做长春关键词优化排名
  • 福建省 园区网互联及网站建设 网络部分题目运营推广计划
  • 电商网站建设基本流程品牌如何推广
  • 网站后台怎么挂广告 怎么做青岛seo经理
  • 来广营做网站怎么开发自己的网站
  • 房地产网站加盟港港网app下载最新版
  • 网站建设所需资料计算机培训班
  • 网站移动端怎么做的如何让关键词排名靠前
  • 视频号推广平台电商seo
  • 外贸网站响应式免费源码资源源码站
  • 山西公司网站开发seo的基本工作内容
  • 青岛品牌网站制作如何做网页制作
  • 营销类网站设计 要点全国最好的广告公司加盟
  • 网站设置怎么删除广告竞价
  • 网站降权原因百度竞价排名技巧
  • 网站服务器购买google搜索引擎入口网址
  • 国外哪个网站做c 挣钱百度网盘网页版入口官网
  • 武汉规划建设局网站网络营销的方式有十种
  • php做网站知乎推广平台的方式有哪些
  • 有哪些做兼职的设计网站有哪些微商引流的最快方法是什么
  • 网站备案最快百度网盘网页版