spring-boot 操作 mongodb 数据库

如何使用 spring-boot 操作 mongodb 数据库

配置文件:

yaml 复制代码
spring:
  data:
    mongodb:
      host: 127.0.0.1
      database: fly_articleDb
      port: 27017
      # 可以采取 mysql 写法
      # uri: mongodb://127.0.0.1/fly_articleDb

依赖信息:

xml 复制代码
<?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 类:

java 复制代码
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;
}

接口:

java 复制代码
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> {
}

实现:

java 复制代码
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);
    }
}

入口类:

java 复制代码
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);
    }
}
相关推荐
数厘12 小时前
2.13 sql数据更新(UPDATE)
数据库·sql·oracle
一江寒逸12 小时前
零基础从入门到精通MongoDB(附加篇):面试八股文全集
数据库·mongodb·面试
星晨雪海12 小时前
Redis 分布式 ID 生成器
数据库·redis·分布式
有味道的男人12 小时前
抖音关键词搜索,视频详情api
linux·数据库·音视频
丁丁点灯o12 小时前
Oracle中金额数字转换为大写汉字
数据库·oracle
fly spider12 小时前
MySQL之Buffer Pool
数据库·mysql
程序员老邢12 小时前
【技术底稿 13】内网 Milvus 2.3.0 向量数据库全流程部署(商助慧 AI 底座,Attu 可视化)
java·数据库·人工智能·ai·语言模型·milvus
XDHCOM12 小时前
ORA-38456: 属性集状态不一致,Oracle报错修复对比,远程处理方案选择
数据库·oracle
羊小蜜.12 小时前
Mysql 14: 存储引擎——架构、引擎对比与锁机制
数据库·mysql·架构
爱学习的小囧12 小时前
VM硬件版本20与17核心区别(ESXi 8.0适配+实操指南)
运维·服务器·网络·数据库·esxi·vmware·虚拟化