目录
[什么是 MongoDB?](#什么是 MongoDB?)
[MongoDB 的主要特点](#MongoDB 的主要特点)
什么是 MongoDB?
MongoDB 是一个开源、面向文档的 NoSQL 数据库 ,它使用类似 JSON 的 BSON(Binary JSON)格式存储数据。与传统的关系型数据库不同,MongoDB 是非关系型的,具有高度的灵活性和可扩展性。
MongoDB 的主要特点
-
文档型:数据以 JSON 格式存储,非常灵活
-
动态模式:同一集合中的文档可以有不同的字段
-
高可用性:支持副本集,自动故障转移
-
水平扩展:支持分片,可以轻松扩展存储容量
-
丰富的查询语言:支持 CRUD、聚合管道、地理空间查询等
-
索引支持:支持各种类型的索引,提高查询性能
与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/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被删除
