• mongodbTemplate怎么优雅的实现修改操作


    大家在开发功能模块的时候,有没有发现遇到需要把数据存到mongodb数据库里,其实在做增加、删除、查询都比较顺利,但在做修改的时候会发现比较麻烦。如果需要修改的对象属性很多,但后端不知道前端会传递过来几个字段,在代码里面按照对象属性来判断,代码会很长很长。这时候我就想有没有办法通过循环获取对象的属性值来简化这个操作,查找了mongodb源码后发现还真有办法实现这个效果。这里就不卖关子了,直接上代码:

    Document document = Document.parse(JSON.toJSONString(content));
    document.remove("contentId");
    document.remove("createTime");
    Update update = new Update();
    for (Map.Entry<String, Object> entry : document.entrySet()) {
      update.set(entry.getKey(), entry.getValue());
    }
    不知道大家有没有发现,这样更新字段,其实你不需要知道需要修改哪几个字段,就可以实现使用最少的代码实现想要实现的效果。
    但是大家需要注意的是,如果某个字段有默认值,但是实际业务并不会修改它,这时候就需要手动移除调该属性,是不是觉得很麻烦。所以只能继续优化这段代码。
    如果我不想在代码里这样写,请问有办法吗?如果想要实现这个功能实际上也是可以的,我们需要在content实体类
    的contentId和createTime两个属性上添加@JsonField(serialize = false)。下面给大家解释下这个注解的作用。这个注解是fastjson提供的,主要是告诉实体对象生成json对象时,可以
    忽视这两个字段。所以代码进一步优化后的效果如下

    然后上面第一段代码调整为:

    Document document = Document.parse(JSON.toJSONString(content));
    Update update = new Update();
    for (Map.Entry<String, Object> entry : document.entrySet()) {
      update.set(entry.getKey(), entry.getValue());
    }

    如果大家在看到这个的时候,有更好的优化方案欢迎留言

     

  • 相关阅读:
    Linux 通过sendmail 发邮件到外部邮箱
    基于Ruby的Watir-WebDriver自动化测试方案
    高性能Linux服务器构建实战笔记
    Unix Linux 通用vi命令,使用帮助手册【珍藏版】
    软件测试人员必备Linux命令(初、中、高级)
    网络七层知多少,学以致用
    手机终端高级测试工程师经验总结
    临别前夕,工作总结 于2014年8月13日 终稿
    基于ruby的watir自动化测试 笔记二
    高级软件测试工程师笔试题
  • 原文地址:https://www.cnblogs.com/mczhou2/p/12704934.html
Copyright © 2020-2023  润新知