Spring Boot之搞定mongoTemplate的知识小结

 更新时间:2020年12月16日 09:16:17   作者:freephp  
这篇文章主要介绍了Spring Boot之搞定mongoTemplate的知识小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

最近开发一些MongoDB+Spring Boot的项目,发现相较于MyBatis来说,Spring Boot对于MongoDB进行操作变化更多,所以总结一下使用mongoTemplate库的知识点,以备以后查阅方便。

首先在项目中的pom.xml配置文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

在需要引入mongoTemplate对象的Service文件中添加该对象即可,如下所示:

public class JobService {

  // 引入mongoTemplate对象
  @Autowired
  MongoTemplate mongoTemplate;

针对CURD操作,常用的API方法有如下4类:

  • 更新: save()。
  • 查询: findAll()、find()、findOne()。
  • 更新操作:update()。
  • 删除操作: remove()。

下面以一个实际的CRUD例子来讲解具体用法,在注释中会给出语法。
先还是创建一个数据类,假设我们是对武侠剑客数据进行操作,POJO对象的定义代码如下所示。

/**
 * 武侠剑客类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "my_sworders")
public class MySworder implements Serializable {
  // 剑客的ID
  @Id
  private String id;
  // 姓名
  @Field
  private String name;
  // 生平描述
  @Field
  private String description;
  // 绝招
  @Field
  private String skill;

  // 创建时间
  @Field
  private int created;
}

其中特别注意的是,@Document是mongodb驱动库提供设置操作的文档集合名称的注解,这里设置集合为my_sworders。
然后针对这个剑客类编写一个Service文件,命名为SworderService.java:

@Service
public class SworderService {

  @Autowired
  MongoTemplate mongoTemplate;

  /**
   * 添加一个剑客
   * @param mySworder
   * @return
   */
  public boolean add(MySworder mySworder) {
    long unixTime = System.currentTimeMillis() / 1000L;
    int nowUnixTime = (int) unixTime;
    mySworder.setCreated(nowUnixTime);
    /**
     * 语法:<T> T mongoTemplate.save(T objectToSave)
     * save方法用于保存数据对象,传递定义好的JavaBean即可,被保存的数据对象会作为返回值被返回。
     * 类似地,使用insert也可以达到保存数据的作用。
     */
    MySworder obj = mongoTemplate.save(mySworder);
    if (obj.getId() > 0) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 获取所有剑客数据
   * @return
   */
  public List<MySworder> findAll() {
    /**
     * 语法:<T> List<T> findAll(Class<T> entityClass)
     * finAll会返回所有entityClass对应的数据集合的数据,相当于MySQL中select * from xxx_table_name。
     */
    return mongoTemplate.findAll(MySworder.class);
  }


  public boolean update(MySworder mySworder) {
    // 创建查询对象
    Query query = Query.query(Criteria.where("id").is(mySworder.getId()));
    Update update = new Update();
    update.set("name", mySworder.getName());
    update.set("description", mySworder.getDescription());
    update.set("skill", mySworder.getSkill());

    /**
     * 语法:public UpdateResult updateFirst(Query query, UpdateDefinition update, Class<?> entityClass)
     * updateFirst用于更新第一个被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
     */
    UpdateResult updateResult = mongoTemplate.updateFirst(query, update, MyArticle.class);
    if (updateResult.getModifiedCount() > 0) {
      return true;
    } else {
      return false;
    }
  }

  public boolean updateBatchByKeyWords(String searchKey,String replaceString) {
    // 创建模糊查询对象
    Pattern pattern = Pattern.compile("^.*" + searchKey + ".*$", Pattern.CASE_INSENSITIVE);
    Criteria criteria = Criteria.where("description").regex(pattern);
    Update update = new Update();
    update.set("description", replaceString);
    Query query = new Query();
    query.addCriteria(criteria);

    /**
     * 语法:public UpdateResult updateMulti(Query query, UpdateDefinition update, Class<?> entityClass)
     * updateMulti用于所有被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
     */
    UpdateResult updateResult = mongoTemplate.updateMulti(query, update, MySworder.class);
    if (updateResult.getModifiedCount() > 0) {
      return true;
    } else {
      return false;
    }
  }

  public boolean delete(String id) {
    MySworder mySworder = new MySworder();
    mySworder.setId(id);
    /**
     * 语法: DeleteResult remove(Object object)
     * 该方法用于删除数据,一般都是传递一个主键ID即可
     */
    DeleteResult deleteResult = mongoTemplate.remove(mySworder);
    if (deleteResult.getDeletedCount() > 0) {
      return true;
    } else {
      return false;
    }
  }
   public MySworder details(String id) {
       Query query = Query.query(Criteria.where("id").is(id));
       /**
        * <T> T findOne(Query query, Class<T> entityClass)
        *
        * findOne就是根据查询条件(query)获取一条数据。
        */
       return mongoTemplate.findOne(query, MySworder.class);
   }

}

其中模糊查询是使用了regex方法,并使用匹配Pattern对象来保存需要被匹配的字符串。

如果是多条件查询,则需要使用Query对象来保存多个查询条件,具体代码如下:

// 用于存储条件对象
Query query = new Query();
Criteria nameCriteria = Criteria.where("name").is(loginUser.getName());
Criteria passwordCriteria = Criteria.where("password").is(loginUser.getPassword());

query.addCriteria(nameCriteria);
query.addCriteria(passwordCriteria);

MyUser hasUser = mongoTemplate.findOne(query, MyUser.class);
Integer userId = hasUser.getId();

如果查询条件很多,那么这个addCriteria的代码段就会很长,这个时候就考虑自己再封装一个工具类,把循环查询条件和一些复杂查询的过程给封装成一个方法,这样事半功倍。

到此这篇关于Spring Boot之搞定mongoTemplate的知识小结的文章就介绍到这了,更多相关Spring Boot搞定mongoTemplate内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中关于String StringBuffer StringBuilder特性深度解析

    Java中关于String StringBuffer StringBuilder特性深度解析

    这篇文章主要介绍了Java中关于String StringBuffer StringBuilder特性深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    这篇文章主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
    2017-11-11
  • SpringBoot使用Validation校验参数的详细过程

    SpringBoot使用Validation校验参数的详细过程

    这篇文章主要介绍了SpringBoot使用Validation校验参数,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java获取CPU和内存占用率最简单的方法

    Java获取CPU和内存占用率最简单的方法

    这篇文章主要介绍了Java获取CPU和内存占用率最简单的方法,文中通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-06-06
  • Spring Boot高级教程之使用Redis实现session共享

    Spring Boot高级教程之使用Redis实现session共享

    这篇文章主要为大家详细介绍了Spring Boot高级教程之使用Redis实现session共享,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Spring Boot集成Redis实现缓存机制(从零开始学Spring Boot)

    Spring Boot集成Redis实现缓存机制(从零开始学Spring Boot)

    这篇文章主要介绍了Spring Boot集成Redis实现缓存机制(从零开始学Spring Boot),需要的朋友可以参考下
    2017-04-04
  • java实现四子棋游戏

    java实现四子棋游戏

    这篇文章主要为大家详细介绍了java实现四子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 详解Spring中bean的几种注入方式

    详解Spring中bean的几种注入方式

    这篇文章主要介绍了详解Spring中bean的几种注入方式,主要介绍了4种注入,主要有属性注入、构造函数注入、工厂方法注入,非常具有实用价值,需要的朋友可以参考下
    2018-06-06
  • MAC下如何设置JDK环境变量

    MAC下如何设置JDK环境变量

    这篇文章主要介绍了MAC下如何设置JDK环境变量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java定长队列的实现示例

    java定长队列的实现示例

    定长队列是一种有限容量的队列,对于某些应用场景非常有用,本文主要介绍了java定长队列的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论