最近的项目用了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. jenkins-为什么要持续集成

    持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为 ...

  2. 分别用js和css实现瀑布流

    下午查找了瀑布流的相关原理,找了一些css3实现的还有js实现的,最后总结了一些比较简单的,易懂的整理起来 1.css3实现 只要运用到    column-count分列 column-width固 ...

  3. AddComponentMenu

    [AddComponentMenu] The AddComponentMenu attribute allows you to place a script anywhere in the " ...

  4. Oracle-属性查询

    1. 查询表的部分字段属性 select t.*, c.comments from user_tab_columns t, user_col_comments c where t.table_name ...

  5. Maven详解【面试+工作】 各种安装 没用

    1 Maven介绍1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目组加入 ...

  6. oracle 创建一个用户,只能访问指定的对象

    1>创建一个ORACLE 的用户 create user username identified by pws; 2>给用户授权  grant connect,resource to us ...

  7. code2102 石子归并2

    划分dp 注意环形,需要把原数复制成两份再进行,详见: http://www.cnblogs.com/FuTaimeng/p/5427426.html 初始条件:dp[i][i]=0 转移方程:dp[ ...

  8. zigbee广播通信原理

    广播:可以理解成,发送模块发出数据,这个网络里的所有节点模块都可以拿到这个数据. 实验:终端模块以广播的形式发送出去,让协调器和路由器模块作为接收器收到数据并显示出来! 协调器模块作为接收模块: 和单 ...

  9. 【转载】Jedis对管道、事务以及Watch的操作详细解析

    转载地址:http://blog.csdn.net/liyantianmin/article/details/51613772 1.Pipeline 利用pipeline的方式从client打包多条命 ...

  10. Linux内核版本

    在Linux中找到/usr/src/kernels/目录,该目录下面有一个系统内核文件 例如:2.6.32-431.11.2.el6.x86_64 Linux内核版本规则 Linux内核版本有三组数字 ...