二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控
十五、Spring Mongodb—MongoTemplate详解及示例代码
十七、Spring Boot 实战 MongoDB 实现批量写入

MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库 。
在高负载的情况下,MongoDB 天然支持水平扩展和高可用,可以很方便地添加更多的节点/实例,以保证服务性能和可用性。在许多场景下,MongoDB 可以用于代替传统的关系型数据库或键/值存储方式,皆在为 Web 应用提供可扩展的高可用高性能数据存储解决方案
Spring Data MongDB 是Spring Data的下的一个模块,在SpringBoot中整合MongoDB就需要添加Spring Data MongDB的依赖
-
-
org.springframework.boot -
spring-boot-starter-data-mongodb
-
- spring:
- data:
- mongodb:
- host: 192.168.136.160
- port:27017
- database:leo
- username:admin
- password:123456
主要注解:
@Document,文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。
@Id(主键):用来将成员变量的值映射为文档的_id的值
@Indexed(索引): 索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据库文档中的数据进行排序。索引能极大提高文档查询效率,如果没有设置索引,MongoDB 会遍历集合中的整个文档,选取符合查询条件的文档记录。这种查询效率是非常低的。
@Field(字段): 文档中的字段,类似于 MySql 中的列。
@Aggregation(聚合): 聚合主要用于数据处理,例如统计平均值、求和等。
-
- 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
Repository是用于操作数据库的类
-
- 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
{ - List
findByTitleStartsWithOrAuthor(String title, String author); - }
Controller代码:
- 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
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是由org.springframework.data.mongodb.corepacket 提供一个Java类。它提供了一组用于与MongoDB交互的丰富特性,并充当Spring的MongoDB支持的中心类。此外,MongoTemplate是线程安全的,可以跨多个实例调用。MongoTemplate类实现了接口MongoOperations,提供了流畅的API进行Query, Criteria, Update等基本操作,此外,也支持泛型的方法实现。使用起来也非常方便,可直接将MongoTemplate作为类中的属性来使用。
- import java.util.List;
-
- /**
- * @author
- * @version 1.0
- * @date 2022/12/17 15:33
- */
- public interface BookService {
- List
findAll(); -
- NewUser findById(String BookId);
-
- NewUser save(Book book);
-
- void deleteById(String BookId);
- }
- 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
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);
- }
- }
- @RestController
- @RequestMapping("/book")
- public class BookController {
- @Autowired
- private final BookService bookService;
-
- @GetMapping("")
- public List
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);
- }
- }