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.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的更多相关文章
- spring boot 整合MongoDB
参考 https://www.cnblogs.com/nbfujx/p/7999171.html
- 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代码 ...
- springboot(十一):Spring boot中mongodb的使用
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- spring boot整合jsp的那些坑(spring boot 学习笔记之三)
Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency> <groupId>or ...
- spring boot 系列之四:spring boot 整合JPA
上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- spring boot整合Hadoop
最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...
随机推荐
- jenkins-为什么要持续集成
持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为 ...
- 分别用js和css实现瀑布流
下午查找了瀑布流的相关原理,找了一些css3实现的还有js实现的,最后总结了一些比较简单的,易懂的整理起来 1.css3实现 只要运用到 column-count分列 column-width固 ...
- AddComponentMenu
[AddComponentMenu] The AddComponentMenu attribute allows you to place a script anywhere in the " ...
- Oracle-属性查询
1. 查询表的部分字段属性 select t.*, c.comments from user_tab_columns t, user_col_comments c where t.table_name ...
- Maven详解【面试+工作】 各种安装 没用
1 Maven介绍1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目组加入 ...
- oracle 创建一个用户,只能访问指定的对象
1>创建一个ORACLE 的用户 create user username identified by pws; 2>给用户授权 grant connect,resource to us ...
- code2102 石子归并2
划分dp 注意环形,需要把原数复制成两份再进行,详见: http://www.cnblogs.com/FuTaimeng/p/5427426.html 初始条件:dp[i][i]=0 转移方程:dp[ ...
- zigbee广播通信原理
广播:可以理解成,发送模块发出数据,这个网络里的所有节点模块都可以拿到这个数据. 实验:终端模块以广播的形式发送出去,让协调器和路由器模块作为接收器收到数据并显示出来! 协调器模块作为接收模块: 和单 ...
- 【转载】Jedis对管道、事务以及Watch的操作详细解析
转载地址:http://blog.csdn.net/liyantianmin/article/details/51613772 1.Pipeline 利用pipeline的方式从client打包多条命 ...
- Linux内核版本
在Linux中找到/usr/src/kernels/目录,该目录下面有一个系统内核文件 例如:2.6.32-431.11.2.el6.x86_64 Linux内核版本规则 Linux内核版本有三组数字 ...