Spring boot整合Mongodb

最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用Mongodb,只需要添加依赖和配置application.properties文件即可。整和方式一共有两种,一种是JPA的快捷方式,还有一种是实现MongoTemplate中的方法。

一、spring boot Mongodb JPA

  这种是mongodb的快捷开发方式,类似于spring data jpa的操作,通过使用spring boot约定的规范来定义名字,与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。

创建一个bean,其中@id是这种表的主键,user就是表的名字

import org.springframework.data.annotation.Id;

public class User  {

    @Id
    private Long id;
    private String name;
    private Integer userage;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getUserage() {
        return userage;
    }
    public void setUserage(Integer userage) {
        this.userage = userage;
    }
    public User(Long id, String name, Integer userage) {
        super();
        this.id = id;
        this.name = name;
        this.userage = userage;
    }

}

通过jpa的方式实现查找,下面介绍最简单的两张和定义规则:

import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserMongodbJPA extends MongoRepository<User, Long>{
/**
 *
 * 单个条件查询,通过名字到数据
 * 方法名字定义规则:
 *  find +By+条件字段(必须是User中的属性)
 */
     List<User> findByName(String name);
    /**
     * 多个条件查询,通过年龄和名字找到数据
     * 方法名字定义规则:
     *
     * ind +By+条件字段(必须是User中的属性)+AND+条件字段(必须是User中的属性)
     */

     List<User>  findByUserageAndName(Integer userage,String name );
}

具体的其他命名规则,可通过下面的图进行查阅:

二、Spring boot  Mongodb原生实现方式

    JAP的方式虽然简单快捷,但是这种方式只能进行简单的查询操作,但是业务中往往需要复杂的逻辑操作,这时就不满足我们的需求,所以使用原生的方式,就能解决复制的逻辑业务。这种方式通过继承MongoRepository接口,只需要调用MongoTemplate中的方法即可。

  插入数据

  MongoTemplate为我们提供了两种方法插入数据:insert和save,两者的区别就是insert方法如果插入的数据的主键已经存在,则会抛出异常;save方法插入的数据的主键已经存在,则会对当前已经存在的数据进行修改操作。

private MongoTemplate mongoTemplate;
    /**
     * insert方法,会新增一条数据
     */
    public void insert(){
        User u = new User("1","zhangsan",18);
        mongoTemplate.insert(u);
    }
    /**
     * save方法,如果主键重复,则修改原来的数据
     */
    public void save() {
        User u = new User("1","小明",19);
        mongoTemplate.insert(u);
    }

 

更新数据

更新一条数据,在关系型数据库中,我们需要where条件筛选出需要更新的数据,并且要给定更新的字段及值,在mongodb中也是一样,如果要使用筛选条件,就必须实例化Query对象。

/**
     * 要使用原生的mongodb方式,就要创建MongoTemplate ,
     *他的方法来实现SQL
     */
private MongoTemplate mongoTemplate;

 /**
     * 更新对象
     */
    public void updateTest() {
        //用来封装所有条件的对像
        Query query = new Query();
        //用来构建条件
        Criteria criteria = new Criteria();
      //criteria.and("你MongoDB中的key").is("你的条件")
        criteria.and("name").is("小明");
       //把条件封装起来   
        query.addCriteria(criteria) ;
       //  Update 中构建更新的内容
        Update update= new Update().set("userage", "15").set("name", "小红");
     //更新查询返回结果集的第一条
       mongoTemplate.updateFirst(query,update,MongoTest.class);
     //更新查询返回结果集的所有
       mongoTemplate.updateMulti(query,update,User.class);
}

   删除数据

删除数据和更新数据类似,只需要使用MongoTemplate中的remove方法就能实现。

**
     * 删除对象
     *、
     */
    public void deleteTestById() {
        Query query=new Query(Criteria.where("name").is("小红"));
        mongoTemplate.remove(query,User.class);
    }

、

三、聚合操作

  在mysql数据库中,我们更多情况我们会使用聚合操作来简便我们的代码,列如SUM、count;在mongodb的数据库中,也是有这样的聚合函数,但是这时不在使用Query对象来封装条件,而是使用Aggregation对象来实现聚合操作,需要注意的是:mongoTemplate.aggregate实现的方法返回的是AggregationResults对象。

    public AggregationResults<T> aggregation(int pageNum, int pageSize, Criteria criteria,String name, String sortName, Sort sort,String tableName)
 throws BbsException {
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(criteria),//用于过滤数据,只输出符合条件的文档
                Aggregation.group(name);//将集合中的文档根据fileID分组,可用于统计结果。
                Aggregation.sort(sort), //将输入文档根据sort排序后输出。
                Aggregation.skip(pageNum - 1) * pageSize),//在聚合管道中跳过指定数量的文档,并返回余下的文档。
                Aggregation.limit(pageSize),//用来限制MongoDB聚合管道返回的文档数。
                Aggregation.sum(userage)//用来求和,求出userage字段值的和
              );
   return mongoTemplate.aggregate(aggregation, tableName, user.class);//tableName表示表的名字

    

原文地址:https://www.cnblogs.com/daijiting/p/10083842.html

时间: 2024-07-29 16:17:24

Spring boot整合Mongodb的相关文章

spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要的表导入数据库 官网上有不同数据库的脚本,找到对应的,导入即可 3. java 代码 将quartz 的相关配置文件,配置为暴露bean,方便后期引用. 有一处关键的地方,就是注入spring 上下文,也可以算是一个坑.如果,不注入spring 上下文,那么新添加的定时任务job,是新new 的一个

spring项目整合mongodb进行开发

spring项目整合mongodb进行开发: MongoDB的性能指标: 100个并发,插入550万条记录的平均吞吐量:大约4100条/秒 MONGODB实际上是一个内存数据库,先将数据保存到内存,然后再写入磁盘中 1.官网下载mongodb. https://www.mongodb.org/downloads 2.redhat上安装好mongodb 3.

spring MVC 整合mongodb

Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码案例 5 1 Spring整合Mongodb 1.1 环境准备 1. mongodb官网 http://www.mongodb.org/,下载mongodb安装包和mongodb的java驱动包. mongodb安装包(下载地址http://www.mongodb.org/downloads).Mo

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一

spring boot整合jsp的那些坑(spring boot 学习笔记之三)

Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <depend

Spring boot整合jsp

这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Spring boot整合jsp的过程已经完成,在这里记录一下. 这篇博文是在LZ上篇文章spring boot+mybatis整合基础上写的,开发工具仍然是Intellij idea.这篇文章的重点是Intellij idea的设置,否

企业分布式微服务云SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方法都比较老,比较繁琐.查了一下文档,实际已经支持较为简单的整合与使用.下面就来详细介绍如何在Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 新建Spring Boot项目,或以Chapter1为基础来操作 pom.xml中引入依赖 这里用到spring-bo

Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的介绍请阅读Apache Kafka简介与安装(一),关于Kafka安装请阅读Apache Kafka安装,关于Kafka集群环境搭建请阅读Apache Kafka集群环境搭建 .这里关于服务器环境搭建不在赘述. Spring Kafka整合Spring Boot创建生产者客户端案例 创建一个kafk

spring boot 整合kafka 报错 Exception thrown when sending a message with key=&#39;null&#39; and payload=JSON to topic proccess_trading_end: TimeoutException: Failed to update metadata after 60000 ms.

org.springframework.kafka.support.LoggingProducerListener- Exception thrown when sending a message with key='null' and payload='{"dataDts":["20180329","20180328","20180327","20180326","20180323"]