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  {@Idprivate 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;}}
View Code

通过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 );
}
View Code

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

二、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);}
View Code

 

     更新数据

     更新一条数据,在关系型数据库中,我们需要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); 
}
View Code

     删除数据

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

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

 

三、聚合操作

   在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表示表的名字
View Code

 

 

 

 

 

 

 

 

    

转载于:https://www.cnblogs.com/daijiting/p/10083842.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs和Vue和Idea

文章目录Vue环境搭建Idea安装Idea中配置Vue环境Node.js介绍npm介绍Vue.js介绍[^3]Idea介绍Vue环境搭建 概述&#xff1a;vue环境搭建&#xff1a;需要npm&#xff08;cnpm&#xff09;&#xff0c;而npm内嵌于Node.js&#xff0c;所以需要下载Node.js。 下载Node.js&#xff1…

Spring MVC上下文父子容器

2019独角兽企业重金招聘Python工程师标准>>> Spring MVC上下文父子容器 博客分类&#xff1a; java spring 在Spring MVC的启动依赖Spring框架&#xff0c;有时候我们在启动Spring MVC环境的时候&#xff0c;如果配置不当的话会造成一些不可预知的结果。下面主要介绍…

12.7 Test

目录 2018.12.7 TestA 序列sequence(迭代加深搜索)B 轰炸bomb(Tarjan DP)C 字符串string(AC自动机 状压DP)考试代码AC2018.12.7 Test题目为2018.1.4雅礼集训。 时间&#xff1a;4.5h期望得分&#xff1a;010010实际得分&#xff1a;010010 A 序列sequence(迭代加深搜索) 显然可…

word文档中统计总页数_如何在Google文档中查找页数和字数统计

word文档中统计总页数Whether you’ve been given an assignment with a strict limit or you just like knowing how many words you’ve written, Google Docs has your back. Here’s how to see exactly how many words or pages you’ve typed in your document. 无论您是…

vue 入门notes

文章目录vue一、js基础二、封装缓存三、组件1、组件创建、引入、挂载、使用2、组件间的传值- 父组件主动获取子组件的数据和方法&#xff08;子组件给父组件传值&#xff09;&#xff1a;- 子组件主动获取父组件的数据和方法&#xff08;父组件给子组件传值&#xff09;&#x…

spring集成 JedisCluster 连接 redis3.0 集群

2019独角兽企业重金招聘Python工程师标准>>> spring集成 JedisCluster 连接 redis3.0 集群 博客分类&#xff1a; 缓存 spring 客户端采用最新的jedis 2.7 1. maven依赖&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifact…

火狐浏览器复制网页文字_从Firefox中的网页链接的多种“复制”格式中选择

火狐浏览器复制网页文字Tired of having to copy, paste, and then format links for use in your blogs, e-mails, or documents? Then see how easy it is to choose a click-and-go format that will save you a lot of time and effort with the CoLT extension for Firef…

vscode配置、使用git

文章目录一、下载、配置git二、vscode配置并使用git三、记住密码一、下载、配置git 1、git-win-x64点击下载后安装直接安装&#xff08;建议复制链接用迅雷等下载器下载&#xff0c;浏览器太慢&#xff0c;记住安装位置&#xff09;。 2、配置git环境变量&#xff1a; 右键 此…

BTrace功能

2019独角兽企业重金招聘Python工程师标准>>> BTrace功能 一、背景 在生产环境中可能经常遇到各种问题&#xff0c;定位问题需要获取程序运行时的数据信息&#xff0c;如方法参数、返回值、全局变量、堆栈信息等。为了获取这些数据信息&#xff0c;我们可以…

.NET(c#) 移动APP开发平台 - Smobiler(1)

原文&#xff1a;https://www.cnblogs.com/oudi/p/8288617.html 如果说基于.net的移动开发平台&#xff0c;目前比较流行的可能是xamarin了&#xff0c;不过除了这个&#xff0c;还有一个比xamarin更好用的国内的.net移动开发平台&#xff0c;smobiler&#xff0c;不用学习另外…

如何在Vizio电视上禁用运动平滑

Vizio维齐奥New Vizio TVs use motion smoothing to make the content you watch appear smoother. This looks good for some content, like sports, but can ruin the feel of movies and TV shows. 新的Vizio电视使用运动平滑来使您观看的内容显得更平滑。 这对于某些内容(例…

无服务器架构 - 从使用场景分析其6大特性

2019独角兽企业重金招聘Python工程师标准>>> 无服务器架构 - 从使用场景分析其6大特性 博客分类&#xff1a; 架构 首先我应该提到&#xff0c;“无服务器”技术肯定有服务器涉及。 我只是使用这个术语来描述这种方法和技术&#xff0c;它将任务处理和调度抽象为与…

Enable Authentication on MongoDB

1、Connect to the server using the mongo shell mongo mongodb://localhost:270172、Create the user administrator Change to the admin database: use admindb.createUser({user: "Admin",pwd: "Admin123",roles: [ { role: "userAdminAnyDataba…

windows驱动程序编写_如何在Windows中回滚驱动程序

windows驱动程序编写Updating a driver on your PC doesn’t always work out well. Sometimes, they introduce bugs or simply don’t run as well as the version they replaced. Luckily, Windows makes it easy to roll back to a previous driver in Windows 10. Here’s…

在Windows 7中的Windows Media Player 12中快速预览歌曲

Do you ever wish you could quickly preview a song without having to play it? Today we look at a quick and easy way to do that in Windows Media Player 12. 您是否曾经希望无需播放就可以快速预览歌曲&#xff1f; 今天&#xff0c;我们探讨一种在Windows Media Play…

Vue.js中的8种组件间的通信方式;3个组件实例是前6种通信的实例,组件直接复制粘贴即可看到运行结果

文章目录一、$children / $parent二、props / $emit三、eventBus四、ref五、provide / reject六、$attrs / $listeners七、localStorage / sessionStorage八、Vuex实例以element ui为例。例子从上往下逐渐变复杂&#xff08;后面例子没有删前面的无用代码&#xff0c;有时间重新…

不可思议的混合模式 background-blend-mode

本文接前文&#xff1a;不可思议的混合模式 mix-blend-mode 。由于 mix-blend-mode 这个属性的强大&#xff0c;很多应用场景和动效的制作不断完善和被发掘出来&#xff0c;遂另起一文继续介绍一些使用 mix-blend-mode 制作的酷炫动画。 CSS3 新增了一个很有意思的属性 -- mix-…

如何更改从Outlook发送的电子邮件中的“答复”地址

If you’re sending an email on behalf of someone else, you might want people to reply to that person instead of you. Microsoft Outlook gives you the option to choose a different default Reply address to cover this situation. 如果您要代表其他人发送电子邮件&…

在Windows 7或Vista资源管理器中禁用缩略图预览

If you want to speed up browsing around in explorer, you might think about disabling thumbnail previews in folders. 如果要加快在资源管理器中的浏览速度&#xff0c;可以考虑禁用文件夹中的缩略图预览。 Note that this works in Windows 7 or Vista 请注意&#xf…

mysql 表数据转储_在MySQL中仅将表结构转储到文件中

mysql 表数据转储For this exercise, we will use the mysqldump utility the same as if we were backing up the entire database. 在本练习中&#xff0c;我们将像备份整个数据库一样使用mysqldump实用程序。 Syntax: 句法&#xff1a; mysqldump -d -h localhost -u root -…