spring-boot 操作 mongodb 数据库
如何使用 spring-boot 操作 mongodb 数据库
配置文件:
spring:
data:
mongodb:
host: 127.0.0.1
database: fly_articleDb
port: 27017
# 可以采取 mysql 写法
# uri: mongodb://127.0.0.1/fly_articleDb
依赖信息:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mongodb-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mongodb-java</name>
<description>mongodb-java</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Bean Comment 类:
package com.example.mongodb.bean;
import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author: fly
* @Date: 2023-07-13 13:27
* @Description:
*/
@ToString
@Data
// comment 集合(类名相同时,可以省略)
@Document(collection = "comment")
// 复合索引
//@CompoundIndex(def = "{'userId': 1, 'nickname': -1}")
public class Comment {
// @Id // 可以省略,当变量名为 id
private String id;
// @Field("content") 变量名相同时可以省略
// 评论内容
private String content;
// 发布时间
private Date publishTime;
// 添加单字段索引
// 发布人id
@Indexed
private String userId;
// 昵称
private String nickname;
// 评论的日期时间
private LocalDateTime createDatetime;
// 点赞数
private Integer likeNum;
// 回复数
private Integer replyNum;
// 状态 1 显示 0 隐藏
private String state;
// 上级id: 具体回复那个用户
private String parentId;
// 文章id
private String articleId;
}
接口:
package com.example.mongodb.mongo;
import com.example.mongodb.bean.Comment;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @author: fly
* @Date: 2023-07-13 13:57
* @Description: 评论接口
*/
public interface CommentRepository extends MongoRepository<Comment, String> {
}
实现:
package com.example.mongodb.service;
import com.example.mongodb.bean.Comment;
import com.example.mongodb.mongo.CommentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author: fly
* @Date: 2023-07-13 13:58
* @Description:
*/
@Service
public class CommentService {
private CommentRepository commentRepository;
private MongoTemplate mongoTemplate;
@Autowired
public void setCommentRepository(CommentRepository commentRepository) {
this.commentRepository = commentRepository;
}
@Autowired
public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
/**
* 保存或更新评论
* @param comment 评论
*/
public void saveComment(Comment comment) {
// mongodb 会自动生成主键
// 也可以自定义主键
commentRepository.save(comment);
}
/**
* 根据 id 删除评论
* @param id 评论id
*/
public void deleteCommentById(String id) {
commentRepository.deleteById(id);
}
/**
* 查找所有评论
* @return 评论列表
*/
public List<Comment> findComments() {
return commentRepository.findAll();
}
/**
* 根据id查询评论
* @param id 评论id
* @return 一条评论
*/
public Comment findCommentById(String id) {
return commentRepository.findById(id).get();
}
/**
* 更新点赞
*/
public void updateLikeNum(String id) {
Query query = Query.query(Criteria.where("_id").is(id));
Update update = new Update();
update.inc("likeNum");
mongoTemplate.updateFirst(query,update,Comment.class);
}
}
入口类:
package com.example.mongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MongodbJavaApplication {
public static void main(String[] args) {
SpringApplication.run(MongodbJavaApplication.class, args);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律