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

市建设与管理局网站自己设计家装的app

市建设与管理局网站,自己设计家装的app,设计师网名昵称,电子商务营销渠道有哪些文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1#xff1a;全局配置方式3.2 方法2#xff1a;非null字段验证策略3.3 方法3#xff1a;通过注解的方式4. 总结1. 文章引言 在开发的过程中#xff0c;我们经常使用MyBatis-Plus的updateById方法更新数据表#xff0c;… 文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1全局配置方式3.2 方法2非null字段验证策略3.3 方法3通过注解的方式4. 总结1. 文章引言 在开发的过程中我们经常使用MyBatis-Plus的updateById方法更新数据表但今天在更新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);虽然设置content为null但数据库并没有将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: 0field-strategy字段更新插入策略属性说明 IGNORED(0) “忽略判断” 所有字段都更新和插入 NOT_NULL(1)“非 NULL 判断” 只更新和插入非NULL值 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(valuecontent)修饰字段的时候还需要加入el属性但我是新版本的MyBatis-Plus已经不支持el属性了如下源码所说 我虽然在content对象上加上update属性如下代码所示 /** 配置内容 */ TableField(value content,update null ) private String content;仍无法将content字段修改为null如下图所示 如果有知道的可以在评论区中留言不胜感激。 此外如果你的MyBatis-Plus版本支持el。你在设置了 field-strategy: 0的前提下同时你已确保了你的PO对象(即TableField(valueXSID)修饰字段加入了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.hkea.cn/news/14337405/

相关文章:

  • 上海房产做哪个网站好如何写网站建设方案书
  • 提供网站建设商家菏泽做网站优化的
  • 贵州网站推广企业免费网站建设哪个品牌好
  • 男生和女生做污的事情免费网站wordpress页头图片比例
  • 网站建设的流程该怎么确定保洁公司网站模板
  • 浏览器怎么打开网站服务器设置怎样做网上代理卖东西
  • 浙江交工宏途交通建设有限公司网站6手机商城网站案例
  • 硬笔书法网站是谁做的drupal网站建设
  • vps打开网站很慢企业信息填报官网
  • 浏览器网站设置在哪里17网站一起做网店怎么样
  • wordpress膜版教程视频aso优化是什么意思
  • 国外做旅游攻略的网站好2024年全员核酸
  • 中国水电建设招标网站山东省交通厅建设网站
  • 固安县城乡和住房建设局网站wordpress 插件不生效
  • 国内做电商网站百度商务合作电话
  • 佛山网站建设公司分享微信营销的五个技巧网络推广培训机构哪个比较好
  • 长春做网站优化价格网站制作是不是要先用ps做
  • wordpress上传大附件seo搜索优化邵阳
  • 用phython做网站免费网页制作软件下载
  • 包装设计网站排行榜深圳商城网站哪家做的好
  • 网页设计精品课程网站wordpress首页轮播
  • 中国建设银行郑州分行网站青岛+网站建设
  • 西网站建设公司长沙网站建站公司
  • 个人博客网站域名注册德州网站收录
  • 福千欣隆网站建设公司 概况淮安市做网站的公司
  • 网站建设项目付款方式制作网页界面工具
  • 国外网站做任务套利重庆网页搜索排名提升
  • 外贸网站营销方案百度app优化
  • 中煤地建设有限公司网站做网站需要多大带宽
  • 使网站有流量网站设置高度