java - spring mvc + spring data jpa 如何优雅的更新数据

 手机用户2502883113 发布于 2022-11-01 23:52

遇到的问题

前台传过来的参数非常的多,而且是和model相对应的,于是就采用以下方法,让springmvc自动赋值到model中去:

java@RequestMapping(value = "xxx")
public String xxx(Member member){

}

赋值好后,由于有些数据不必更新,就在前台没有传进来(在member中就为null),如果这样直接更新,那么会直接把那些为null的属性 在数据库中也设为null。
在网上查了下资料,在modle中加上注解:@DynamicUpdate,可以达到效果动态更新bean中不为空的字段,但实际用起来并不行。后来了解到必须首先将数据load出来,然后再去对load出来的属性setXXX的操作再更新才行。

自己想到的解决办法

用反射去做,首先先从数据库中把要更新的对象load出来,然后再用反射去读取springmvc给自动赋值好的对象,把不为空的set到load出来的.
不知还有没有其他更优雅的解决办法

3 个回答
  • 单独使用Form来封装请求参数比较好,之前我遇到过这样一个问题:

    Member字段有一个admin字段,这个字段是不允许用户更新的,但是如果直接这样把Member作为Handler方法的参数,而且不做任何处理直接更新非空(包括使用BeanUtils),Member里的这个admin字段就被更新了~

    所以请求中包含哪些参数,就在Form中定义哪些,这样更加清晰明确,同时可以确保不出现上述安全问题。

    2022-11-03 11:12 回答
  • 我们使用方式和题主很类似,加入是否忽略集合的参数和excleude指定属性的功能

    2022-11-03 11:13 回答
  • 你的解决方法也不是很妥,因为"把不为空的set",会把原本在页面上本想清空的字段也没法set empty了.
    我们的解决方法是,新建一个和界面上字段对应的form dto,用多少字段写多少字段(不要用模型),去接收成对象,然后使用你的刚刚那个方法.
    或者使用BeanUtil.copyProprty(formDto,modle)

    2022-11-03 11:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有