MongoDB的安装和整合SpringBoot

目录

[什么是 MongoDB?](#什么是 MongoDB?)

[MongoDB 的主要特点](#MongoDB 的主要特点)

与Redis的对比

安装

2.SpringBoot整合MangoDB

(1)创建数据库

(2)创建SpringBoot项目

依赖和配置文件

pojo实体类

Repository接口

前端Controller

(3)测试

保存书籍

​编辑

添加书籍

通过表单添加书籍

根据id查找

根据名称查找

根据名称模糊查找

修改价格

根据名称删除

根据id删除


什么是 MongoDB?

MongoDB 是一个开源、面向文档的 NoSQL 数据库 ,它使用类似 JSON 的 BSON(Binary JSON)格式存储数据。与传统的关系型数据库不同,MongoDB 是非关系型的,具有高度的灵活性和可扩展性。

MongoDB 的主要特点

  1. 文档型:数据以 JSON 格式存储,非常灵活

  2. 动态模式:同一集合中的文档可以有不同的字段

  3. 高可用性:支持副本集,自动故障转移

  4. 水平扩展:支持分片,可以轻松扩展存储容量

  5. 丰富的查询语言:支持 CRUD、聚合管道、地理空间查询等

  6. 索引支持:支持各种类型的索引,提高查询性能

与Redis的对比

安装

找到官网下载:

MangoDB下载路径https://www.mongodb.com/try/download/community

进入安装界面时,注意修改数据的安装路径

可以在next之后勾选Install MangoDB Compass(MangoDB的图形化界面),也可以取消勾选单独安装

等待安装完成

GUI界面如图所示

点击Add new connection

填写连接名字之后其他使用默认值,点击Save&Connect就可以连接了

连接成功如图

2.SpringBoot整合MangoDB

(1)创建数据库

输入DataBase Name和Collection Name之后点击创建

(2)创建SpringBoot项目

注意自己的SpringBoot与mongoDB版本的适配:

依赖和配置文件

导入项目的依赖:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qcby</groupId>
    <artifactId>MyFirstMongoDBDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.5</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

配置application.yml文件

XML 复制代码
spring:
  data:
    mongodb:
      uri: mongodb://localhost/MyFirstMongoDB

pojo实体类

创建实体类Book,使用@Document(collation = "book")注解通过collation参数指定Book类声明为MongoDB的文档集合book

java 复制代码
package com.qcby.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("book")
public class Book {

    @id  //主键,不可重复,自带索引
    private Integer id;
    private String name;
    private Double price;

}

Repository接口

java 复制代码
package com.qcby.repository;

import com.qcby.pojo.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface BookRepository extends MongoRepository<Book, Integer> {

    Book findBookById(Integer id);
    Book findByName(String name);
    List<Book> findBooksByNameContains(String name);

}

注意:@Mapper是Mybatis的注释,不能代替@Repository

MongoRepository<Book, Integer>为什么要这样写?

这是 Spring Data 的泛型设计,MongoRepository<T, ID> 有两个泛型参数:

第一个参数 Book:实体类型

告诉 Spring Data 这个 Repository 要操作的是哪个实体类

对应 MongoDB 中的文档(Document)

第二个参数 Integer:主键类型

指定实体类中 @Id 注解的字段类型

在Book 类中,id 字段的类型是 Integer

继承后可以获得这些方法:

java 复制代码
// 继承后自动获得这些方法
bookRepository.save(book);        // 增/改
bookRepository.findById(id);      // 查单个
bookRepository.findAll();         // 查所有
bookRepository.deleteById(id);    // 删
bookRepository.count();           // 计数

方法名字会自动解析:

java 复制代码
// Spring Data 会根据方法名自动实现
Book findBookById(Integer id);     // 自动实现:根据ID查询
Book findByName(String name);      // 自动实现:根据name查询

前端Controller

java 复制代码
package com.qcby.controller;

import com.qcby.pojo.Book;
import com.qcby.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class BookController {

    @Autowired
    private BookRepository bookRepository;

    /**
     * 保存书籍
     * @return
     */
    @GetMapping("/saveBooks")
    public List<Book> saveBooks(){
        List<Book> list = new ArrayList<>();
        for(int i = 0; i < 4; i++) {
            list.add(new Book(i, "书本"+i, 66.6));
        }
        return bookRepository.saveAll(list);
    }

    /**
     * 添加书籍
     */
    @GetMapping("/addBook")
    public void addBook(){
        Book book = new Book(4, "书本4", 55.3);
        bookRepository.insert(book);
    }

    /**
     * 通过表单参数添加书
     * @param id
     * @param name
     * @param price
     */
    @GetMapping("/insertBook")
    public void updateBook(Integer id,String name,Double price){
        Book book = new Book(id,name,price);
        bookRepository.insert(book);
    }

    /**
     * 根据id查找
     * @param id
     * @return
     */
    @GetMapping("/findById")
    public Book findById(Integer id){
        return bookRepository.findBookById(id);
    }

    /**
     * 根据名称查找
     * @param name
     * @return
     */
    @GetMapping("/findByName")
    public Book findByName(String name){
        return bookRepository.findByName(name);
    }

    /**
     * 姓名模糊查询
     * @param name
     * @return
     */
    @GetMapping("/findByNameContains")
    public List<Book> findByNameContains(String name){
        return bookRepository.findBooksByNameContains(name);
    }

    /**
     * 修改价格
     * @param id
     * @param price
     * @return
     */
    @GetMapping("/updateBook")
    public Book updateBook(int id,double price){
        Book book = bookRepository.findBookById(id);
        if(book != null){
            book.setPrice(price);
        }
        return bookRepository.save(book);
    }

    /**
     * 根据名字删除
     * @param name
     */
    @GetMapping("/deleteBookByName")
    public void deleteBookByName(String name){
        Book book = bookRepository.findByName(name);
        bookRepository.delete(book);
    }

    /**
     * 根据id删除
     * @param id
     */
    @GetMapping("/deleteBookById")
    public void deleteBookById(Integer id){
        Book book = bookRepository.findBookById(id);
        bookRepository.delete(book);
    }
}

(3)测试

保存书籍

http://localhost:8080/saveBooks

添加书籍

http://localhost:8080/addBook

通过表单添加书籍

http://localhost:8080/insertBook?id=5&name=SpringBoot%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3&price=87.1

根据id查找

http://localhost:8080/findById?id=4

根据名称查找

http://localhost:8080/findByName?name=书本4

根据名称模糊查找

http://localhost:8080/findByNameContains?name=%E4%B9%A6%E6%9C%AC

修改价格

http://localhost:8080/updateBook?id=0&price=888.88

根据名称删除

http://localhost:8080/deleteBookByName?name=%E4%B9%A6%E6%9C%AC4

书本4被删除

根据id删除

http://localhost:8080/deleteBookById?id=0

书本0被删除

相关推荐
EnglishJun1 小时前
Linux系统编程(十)--- 数据库Sqlite3
数据库·sqlite
秦jh_2 小时前
【Redis】通用命令、string类型
数据库·redis·缓存
不懒不懒2 小时前
【苏宁易购商品评价文本分析实战:从自动化爬取到分词清洗全流程】
运维·数据库·自动化
Predestination王瀞潞2 小时前
动态 SQL 的核心标签及使用细节
数据库·sql
_OP_CHEN2 小时前
【MySQL数据库基础】(三)MySQL 库的核心操作全解析:创建、修改、备份一条龙搞定
linux·数据库·sql·mysql·c/c++·mysql操作·企业级组件
数据知道2 小时前
MongoDB心跳检测与故障转移:自动主从切换的全过程解析
数据库·mongodb·wpf
古城小栈2 小时前
MongoDB go快速操控
数据库·mongodb·golang
行者-全栈开发2 小时前
接口性能优化完整案例:500ms→50ms
java·spring boot·spring cloud·性能优化·java-zookeeper
小年糕是糕手2 小时前
【35天从0开始备战蓝桥杯 -- Day2】
开发语言·jvm·数据库·c++·程序人生·考研·蓝桥杯