如何轻松在禹州创建并管理一个专业的网站博客自媒体?
摘要:网站博客自媒体轻松,禹州做网站,国内建网站公司,秦皇岛高端网站设计文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1:全局配置方式3.2 方法2:非null字段验证策
网站博客自媒体轻松,禹州做网站,国内建网站公司,秦皇岛高端网站设计文章目录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采用了默认的字段验证策略。
