MongoDB安装及开发系例全教程

一、系列文章目录

一、MongoDB安装教程---官方原版****

二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控

三、MongoDB 基于角色的访问控制****

四、MongoDB用户管理****

五、MongoDB基础知识详解****

六、MongoDB---Indexs****

七、MongoDB事务详解****

八、MongoDB分片教程

九、MongoDB 操作(CRUD) 教程

十、MongoDB时间序列

十一、Spring连接到MongoDB的几种方法

十二、MongoDB可视化工具(免费)

十三、Spring MongoDB 开发教程(一)

十四、Spring MongoDB 开发教程(二)

十五、Spring Mongodb---MongoTemplate详解及示例代码

十六、MongoTemplate ---保存、更新和删除文档

十七、Spring Boot 实战 MongoDB 实现批量写入

MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持"无模式"的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库 。

在高负载的情况下,MongoDB 天然支持水平扩展和高可用,可以很方便地添加更多的节点/实例,以保证服务性能和可用性。在许多场景下,MongoDB 可以用于代替传统的关系型数据库或键/值存储方式,皆在为 Web 应用提供可扩展的高可用高性能数据存储解决方案

二、SpringBoot整合MongoDB

1、添加MongoDB依赖

Spring Data MongDB 是Spring Data的下的一个模块,在SpringBoot中整合MongoDB就需要添加Spring Data MongDB的依赖

java 复制代码
`<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>`

2、配置文件

java 复制代码
`spring:
  data:
    mongodb:
      host: 192.168.136.160
      port:27017
      database:leo
      username:admin
      password:123456`

3、实例代码

主要注解:

@Document,文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。

@Id(主键):用来将成员变量的值映射为文档的_id的值

@Indexed(索引): 索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据库文档中的数据进行排序。索引能极大提高文档查询效率,如果没有设置索引,MongoDB 会遍历集合中的整个文档,选取符合查询条件的文档记录。这种查询效率是非常低的。

@Field(字段): 文档中的字段,类似于 MySql 中的列。

@Aggregation(聚合): 聚合主要用于数据处理,例如统计平均值、求和等。

java 复制代码
`import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "Book")
public class Book {

    @Id
    private String id;

    private String title;

    private String author;

    private String summary;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }
}`

SpringBoot操作MongoDB有两种方式,分别是继承MongoRepository类和service注入MongoTemplate

MongoRepository方式:

Repository是用于操作数据库的类

java 复制代码
`package com.palmer.rachelle.javaspringmongodb.repository;
import com.palmer.rachelle.javaspringmongodb.model.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;

public interface BookRepository extends MongoRepository<Book, String> {
    List<Book> findByTitleStartsWithOrAuthor(String title, String author);
}`

Controller代码:

shell 复制代码
import com.palmer.rachelle.javaspringmongodb.model.Book;
import com.palmer.rachelle.javaspringmongodb.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
public class BookController {

    @Autowired
    private BookRepository bookRepository;

    /**
     * Handles listing of all books and searching.
     * @param model
     * @return
     */
    @GetMapping({"/index", "/search"})
    public String showBooks(Model model, String keyword) {
        if (keyword != null) {
            model.addAttribute("books",
                this.bookRepository.findByTitleStartsWithOrAuthor(keyword, keyword));
            model.addAttribute("keyword", keyword);
        } else {
            List<Book> books = this.bookRepository.findAll();
            model.addAttribute("books", books);
        }
        return "index";
    }

    /**
     * Show form for adding a book document
     * @param book
     * @return
     */
    @GetMapping("/add-book")
    public String showAddBookForm(Book book) {
        return "add-book";
    }

    /**
     * This will CREATE a books. C of CRUD.
     * @param book
     * @param result
     * @param model
     * @return
     */
    @PostMapping("/add-book")
    public String addBook(Book book, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "add-book";
        }
        this.bookRepository.save(book);
        return "redirect:/index";
    }

    /**
     * Show form for editing a book document. The R in CRUD.
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/edit-book/{id}")
    public String showUpdateForm(@PathVariable("id") String id, Model model) {
        Book book = this.bookRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid book Id:" + id));
        model.addAttribute("book", book);

        return "edit-book";
    }

    /**
     * This will update a book document. The U in CRUD
     * @param id
     * @param book
     * @param result
     * @param model
     * @return
     */
    @PostMapping("/edit-book/{id}")
    public String updateBook(@PathVariable("id") String id, Book book, BindingResult result, Model model) {
        if (result.hasErrors()) {
            book.setId(id);
            return "edit-book";
        }

        this.bookRepository.save(book);

        return "redirect:/index";
    }

    /**
     * This will delete a book document. The D in CRUD.
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/delete-book/{id}")
    public String deleteUser(@PathVariable("id") String id, Model model) {
        Book book = this.bookRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid book Id:" + id));
        this.bookRepository.delete(book);

        return "redirect:/index";
    }
}

MongoTemplate实现方式:

MongoTemplate是由org.springframework.data.mongodb.corepacket 提供一个Java类。它提供了一组用于与MongoDB交互的丰富特性,并充当Spring的MongoDB支持的中心类。此外,MongoTemplate是线程安全的,可以跨多个实例调用。MongoTemplate类实现了接口MongoOperations,提供了流畅的API进行Query, Criteria, Update等基本操作,此外,也支持泛型的方法实现。使用起来也非常方便,可直接将MongoTemplate作为类中的属性来使用。

shell 复制代码
import java.util.List;

/**
 * @author  
 * @version 1.0
 * @date 2022/12/17 15:33
 */
public interface BookService {
    List<Book> findAll();

    NewUser findById(String BookId);

    NewUser save(Book book);

    void deleteById(String BookId);
}
shell 复制代码
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 java.util.List;

public class BookServiceImpl implements BookService {

    @Autowired
    private MongoTemplate template;

    @Override
    public List<Book> findAll() {
        return template.findAll(Book.class);
    }

    @Override
    public Book findById(String BookId) {
        return template.findById(BookId,Book.class);
    }

    @Override
    public Book save(Book book) {
        template.save(book);
        return book;
    }

    @Override
    public void deleteById(String BookId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(BookId));
        template.remove(query, Book.class);
    }
}
shell 复制代码
@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private final BookService bookService;
  
    @GetMapping("")
    public List<Book> getAllBooks() {
        return bookService.findAll();
    }

    @GetMapping("/{userId}")
    public Book getByBookId(@PathVariable String bookId) {
        return bookService.findById(bookId);
    }

    @PostMapping("/addNewBook")
    @ResponseBody
    public Book addNewBook(@RequestBody Book book) {
        return bookService.save(book);
    }

    @DeleteMapping("/{bookId}")
    public String delete(@PathVariable String bookId) {
        Book book = new Book();
        book.setId(bookId);
        bookService.deleteById(bookId);
        return "deleted: " + bookId;
    }

    @PutMapping("")
    public Book update(@RequestBody Book book) {
        return bookService.save(book);
    }
}
相关推荐
喵叔哟7 分钟前
重构代码之移动字段
java·数据库·重构
念白44310 分钟前
智能病历xml提取
数据库·sql·oracle
qingy_204614 分钟前
【JavaWeb】JavaWeb入门之XML详解
数据库·oracle
大数据面试宝典19 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
努力的小雨23 分钟前
快速上手 KSQL:轻松与数据库交互的利器
数据库·经验分享
Gentle58626 分钟前
labview中连接sql server数据库查询语句
数据库·labview
Gentle58627 分钟前
labview用sql server数据库存取数据到一个单元格
数据库·labview
2401_8576363930 分钟前
共享汽车管理新纪元:SpringBoot框架应用
数据库·spring boot·汽车
菲兹园长30 分钟前
表的设计(MYSQL)
数据库·mysql
Java Fans1 小时前
MySQL数据库常用命令大全(完整版——表格形式)
数据库·mysql