zoukankan      html  css  js  c++  java
  • 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());
    }

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

     

  • 相关阅读:
    HttpMessageNotWritableException: Could not write JSON: No serializer found for class ****
    处理【Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operatio】
    java 日历类Calendar用法
    linux配置nginx
    linux 重命名文件和文件夹
    CentOS 6.7 配置 yum 安装 Nginx
    maven打包时跳过单元测试
    Eclipse 保存文件时自动格式化代码
    mybatis大于号,小于号,去地址符,单引号,双引号转义说明
    玩转Eclipse — 自动代码生成的Java Code Template
  • 原文地址:https://www.cnblogs.com/mczhou2/p/12704934.html
Copyright © 2011-2022 走看看