账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Springboot如何优雅地实现更新Model
    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
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部