SpringBoot集成Mongodb

SpringBoot集成Mongodb

本文简要介绍SpringBoot集成mongodb,并实现增删改查

1. 引入依赖

spring-boot-starter-data-mongodb 提供了mongoTemplate供底层操作及mongodb驱动等

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2.修改配置文件

application.yml

spring:application:name: mongoDemodata:mongodb:uri: mongodb://myUser:123456@192.168.48.137:17017/article_db

uri格式:mongodb://用户名:密码@host:端口号/数据库名称
注意:
我的mongodb版本8.0.4,运行时可能会报错,有如下三种情况
情况1:

spring:application:name: mongoDemodata:mongodb:host: 192.168.48.137port: 17017database: article_dbusername: myUserpassword: 123456

在这里插入图片描述
这里说授权问题,网上说不能写用户名密码
情况2:

spring:application:name: mongoDemodata:mongodb:host: 192.168.48.137port: 17017database: article_db

去掉用户名密码
在这里插入图片描述这里提示大概意思是没授权

情况3:
在这里插入图片描述

      uri: mongodb://myUser:123456@192.168.48.137:17017/article_db?authSource=admin&authMechanism=SCRAM-SHA-256

uri加后缀后仍然报错
在这里插入图片描述

3.创建实体类

@Document指定集合名
使用collection和value都可以,注意不要写成collation
@Field 指定集合中对应的key
@Indexed 自动创建索引

@Idprivate String id;@Field("content")private String content;@Field("user_id")@Indexedprivate String userId;private String nickName;private LocalDateTime createDate;private Integer likeNum;private Integer replayNum;private String state;private String articleId;private String parentId;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public LocalDateTime getCreateDate() {return createDate;}public void setCreateDate(LocalDateTime createDate) {this.createDate = createDate;}public Integer getLikeNum() {return likeNum;}public void setLikeNum(Integer likeNum) {this.likeNum = likeNum;}public Integer getReplayNum() {return replayNum;}public void setReplayNum(Integer replayNum) {this.replayNum = replayNum;}public String getState() {return state;}public void setState(String state) {this.state = state;}public String getArticleId() {return articleId;}public void setArticleId(String articleId) {this.articleId = articleId;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}@Overridepublic String toString() {return "Comment{" +"id='" + id + '\'' +", content='" + content + '\'' +", userId='" + userId + '\'' +", nickName='" + nickName + '\'' +", createDate=" + createDate +", likeNum=" + likeNum +", replayNum=" + replayNum +", state='" + state + '\'' +", articleId='" + articleId + '\'' +", parentId='" + parentId + '\'' +'}';}

4.业务类实现

接口:

package com.example.mongodemo.article.service;import com.example.mongodemo.article.PO.Comment;import java.util.List;public interface IComentService {/*** 保存* @param comment*/void saveComment(Comment comment);/*** 更新* @param comment*/void updateComment(Comment comment);/*** 根据id获取对象* @param id* @return*/Comment getById(String id);/*** 根据id删除* @param ids*/void deleteByIds(String ...ids);/*** 根据条件查询* @param articleId* @return*/List<Comment> queryListByArticleId(String articleId);/*** 根据parentid分页查询* @param parentId 父id* @param page 页数从0开始* @param size 每页条数* @return*/Page<Comment> findCommentByParentId(String parentId,int page,int size);
}

实现类:

@Service
public class CommentService implements IComentService{@Autowiredprivate CommentRepository repository;@Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic void saveComment(Comment comment) {mongoTemplate.insert(comment,"comment");}@Overridepublic void updateComment(Comment comment) {Query query = Query.query(Criteria.where("id").is(comment.getId()));Update update = new Update().set("nickname",comment.getNickName()).set("content",comment.getContent()).set("likeNum",comment.getLikeNum()).set("replayNum",comment.getReplayNum());mongoTemplate.updateFirst(query,update,Comment.class);}@Overridepublic Comment getById(String id) {Query query = Query.query(Criteria.where("id").is(id));return mongoTemplate.findOne(query,Comment.class);}@Overridepublic void deleteByIds(String... ids) {Query query = Query.query(Criteria.where("id").in(ids));mongoTemplate.findAllAndRemove(query,"comment");}@Overridepublic List<Comment> queryListByArticleId(String articleId) {Query query = Query.query(Criteria.where("articleId").is(articleId));List<Comment> commentList = mongoTemplate.find(query, Comment.class, "comment");return commentList;}@Overridepublic Page<Comment> findCommentByParentId(String parentId, int page, int size) {return repository.findByParentId(parentId, PageRequest.of(page,size));}
}

持久层:

public interface CommentRepository extends MongoRepository<Comment,String > {Page<Comment> findByParentId(String parentId, Pageable pageable);
}

5.测试

@Test
public void saveTest(){Comment comment = new Comment();comment.setId("1");comment.setContent("12344334");comment.setUserId("0001");comment.setArticleId("0001");comment.setNickName("张三");comment.setLikeNum(100);comment.setReplayNum(20);comment.setState("1");comment.setCreateDate(LocalDateTime.now());commentService.saveComment(comment);}
@Test
public void getByIdTest(){System.out.println(commentService.getById("1"));List<Comment> comments=mongoTemplate.findAll(Comment.class,"comment");for(Comment comment:comments){System.out.println(comment);}}

在这里插入图片描述
数据库:
在这里插入图片描述

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

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

相关文章

java根据模板导出word,并在word中插入echarts相关统计图片以及表格

引入依赖创建word模板创建ftl模板文件保存的ftl可能会出现占位符分割的问题&#xff0c;需要处理将ftl文件中的图片的Base64删除&#xff0c;并使用占位符代替插入表格&#xff0c;并指定表格的位置在图片下方 Echarts转图片根据模板生成word文档DocUtil导出word文档 生成的wor…

RabbitMQ的工作模式

&#xff08;一&#xff09;工作模式 RabbitMQ有7种工作模式来进行消息传递&#xff0c;我们上一篇博客就是简单模式 1.简单模式&#xff08;simple&#xff09; 也就是点对点的形式 P就是生产者&#xff0c;C就是消费者&#xff0c;Queue就是消息队列&#xff08;生产者向qu…

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件

bundle.json 文件内容如下所示&#xff1a; 下面是对各个字段的解释&#xff1a; 1. name: "ohos/demos" - 这是组件或项目的名称&#xff0c;这里表示它属于 OHOS&#xff08;OpenHarmony OS&#xff09;生态系统下的一个名为"demos"的组件。 2. descri…

JavaScript-正则表达式方法(RegExp)

RegExp 对象用于将文本与一个模式匹配。 有两种方法可以创建一个 RegExp 对象&#xff1a;一种是字面量&#xff0c;另一种是构造函数。 字面量由斜杠 (/) 包围而不是引号包围。 构造函数的字符串参数由引号而不是斜杠包围。 new RegExp(pattern[, flags])一.符集合 1.选择…

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日&#xff0c;深交所官网显示&#xff0c;浙江信凯科技集团股份有限公司&#xff08;以下简称“信凯科技”&#xff09;主板IPO提交注册。 自2022年递交上市申请&#xff0c;信凯科技的IPO之路已走过两年光景&#xff0c;尽管提交注册&#xff0…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…

4G DTU赋能智能配电环网柜通信运维管理

在智能电网建设持续推进下&#xff0c;智能配电环网柜作为配电网的关键节点设备&#xff0c;其稳定、高效运行对保障电力可靠供应是品质生活的基本保障。通信系统是实现智能配电环网柜远程监控与管理的核心纽带&#xff0c;而4G DTU&#xff08;数据传输单元&#xff09;凭借其…

STC的51单片机LED点灯基于KEIL

前言&#xff1a; 该文源于回答一个朋友的问题&#xff0c;代码为该朋友上传&#xff0c;略作修改&#xff0c;在此说明问题以及解决问题的思路&#xff0c;以减少新手错误。 电路图&#xff1a; 该位朋友未上传电路图&#xff0c;说明如下&#xff1a; stc8g1k08a-sop8控制…

C++ 文字识别OCR

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

基于springboot的自习室预订系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG

注&#xff1a;本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态&#xff1a;SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层&#xff0c;有个 FLAGS 字段&#xff0c;这个字段有…

Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access&#xff0c;也就是Remote的DMA&#xff0c;是一种硬件机制&#xff0c;能直接访问远端结点的内存&#xff0c;而不需要处理器介入。 其中&#xff1a; Remote&#xff1a;跨node进行数据传输Direct&#xff…

Docker

1. 初始Docker 1.1. 什么是Docker&#xff1f; 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环…

Deep4SNet: deep learning for fake speech classification

Deep4SNet&#xff1a;用于虚假语音分类的深度学习 摘要&#xff1a; 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中&#xff0c;录音听起来有点合成&#xff0c;而在《模仿》中…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日&#xff0c;我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证&#xff0c;这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎&#xff08;PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

LabVIEW光流算法的应用

该VI展示了如何使用NI Vision Development Module中的光流算法来计算图像序列中像素的运动矢量。通过该方法&#xff0c;可以实现目标跟踪、运动检测等功能&#xff0c;适用于视频处理、机器人视觉和监控领域。程序采用模块化设计&#xff0c;包含图像输入、算法处理、结果展示…

JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)

问题&#xff1a; 有时maven使用的jar包版本是最新版&#xff0c;但项目需要的是旧版本&#xff0c;每次重新install会自动将mavan的jar包覆盖到项目的lib目录中&#xff0c;导致项目报错。 解决&#xff1a; 在IDEA中手动配置该jar包对应的目录。 点击菜单File->Projec…