最近的项目用了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.save(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表示表的名字

    

Spring boot整合Mongodb的更多相关文章

  1. spring boot 整合MongoDB

    参考     https://www.cnblogs.com/nbfujx/p/7999171.html

  2. 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代码 ...

  3. springboot(十一):Spring boot中mongodb的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  4. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

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

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  6. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

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

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  8. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  9. spring boot整合Hadoop

    最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...

随机推荐

  1. 服务器意外重启导致storm报错的问题处理

    解决方法 cat /opt/storm-0.8.2/conf/storm.yaml中找到storm.local.dir设定的目录,备份supervisor和workers两个文件夹,#nohup su ...

  2. Lambda表达式在Android开发中的应用

    在Java8中拥有Lambda表达式的新功能,如果现在Android项目中使用,首先,必须在项目中的build.gradle配置一下 使用Lambda表达式必须满足只有一个待实现方法这个规则,否则就不 ...

  3. 编译gcc5.1.0时的报错

    编译安装gcc5.1.0时出现如下报错: configure: error: error verifying int64_t uses long long 这是由于没有安装gcc_c++导致的,安装下 ...

  4. 蓝桥杯算法训练 java算法 表达式求值

    问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...

  5. Makefile 自动搜索 c 和 cpp 文件, 并生成 .a 静态库文件

    最近 又弄linux 下的 .a 静态库编译, 于是想 做个 一劳永逸的Makefile, 经过一番折腾, 最后成功了 只需要 改两个 参数 就可以执行了(MYLIB 和 VPATH), 代码 如下: ...

  6. CS4.1 RPM打包函数分析

    shell举例说明:脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" &quo ...

  7. SpringBoot自定义拦截器实现

    1.编写拦截器实现类,此类必须实现接口   HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码 如:OneInterceptor package com ...

  8. pcl point merge

    http://pointclouds.org/documentation/tutorials/pairwise_incremental_registration.php#pairwise-increm ...

  9. XML(子节点序列化反序列对象)读写

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. Source Insight: has been changed outside of Source Insight

    has been changed outside of Source Insight 2018年04月26日 09:41:01 linux_c_coding_man 阅读数:247 摘自:https: ...