如何使用 spring-boot 操作 mongodb 数据库
配置文件:
spring:data:mongodb:host: 127.0.0.1database: fly_articleDbport: 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 // 可以省略,当变量名为 idprivate String id;// @Field("content") 变量名相同时可以省略// 评论内容private String content;// 发布时间private Date publishTime;// 添加单字段索引// 发布人id@Indexedprivate String userId;// 昵称private String nickname;// 评论的日期时间private LocalDateTime createDatetime;// 点赞数private Integer likeNum;// 回复数private Integer replyNum;// 状态 1 显示 0 隐藏private String state;// 上级id: 具体回复那个用户private String parentId;// 文章idprivate 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;@Autowiredpublic void setCommentRepository(CommentRepository commentRepository) {this.commentRepository = commentRepository;}@Autowiredpublic 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);}
}