- 42
- 0
更新Model目前我有两种方式,但是感觉都不是很好:
方式一:
现有一个SpringBoot的WebApi项目,通过前端发起http请求来进行Model更新。
比如,要更新一个id为1的User{id,name,age,nickName}实体,我从前端只传了这样一个User实体json来更新nickName:{id:1,nickName:'young'},在后端接收到这样一个实体后我是这样更新的:
var user=userService.getById(model.id);
if(model.name!=null){
user.name=model.name;
}
if(model.age!=null){
user.age=model.age;
}
if(model.nickName!=null){
user.nickName=model.nickName;
}
userService.update(user);
- 缺点:从上面的例子中,显而易见,这种编码方式太糟糕了。如果User类有100个属性,我就要if判断100次!
方式二:
Mybatis中通过Generator工具可以生成一个updateBySelective()的方法,可以自动根据传入的模型的值来自行完成这样一个操作。
比如,如果你传入的实体中含有nickName属性,则自动帮你更新,否则不更新。这一切的操作都只需要你优雅地调用方法就行了:
userService.update(model);
但是这样的方法也会存在一个问题:
如果我的业务逻辑不允许修改age,但是当前端传入了age后就肯定会自动更新这个age,如果我要限制更新age,就只能这么写:
if(model.age!=null){
model.age=null;
}
userService.update(model);
这样的代码也会显得丑陋无比……
- 缺点:如果某些属性不允许更细的话,也需要不停加入if语句。
问题:
有没有更好的方式,可以解决上面两种方法的缺点,实现优雅地更新Model?
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
