首页 > 数据库 >MongoDB简介及SpringBoot整合

MongoDB简介及SpringBoot整合

时间:2023-03-20 13:01:35浏览次数:52  
标签:return SpringBoot MongoDB id book 简介 public String

一、概述

MongoDB中的记录是一个文档,它是一个数据结构组成 字段和值对。MongoDB文档类似于JSON。对象。

字段的值可能包括其他文档、数组、 和文档数组:

  • 数据库(Database):和关系型数据库一样,每个数据库中有自己的用户权限,不同的项目组可以使用不同的数据库
  • 集合(Collection): 集合指的是文档组(类似于 Mysql 中的表的概念),里面可以存储许多文档
  • 文档(Document): 文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档、数组和文档数组

官网:​​https://www.mongodb.com/​

二、主要特点

1、高性能

MongoDB提供高性能的数据持久性。特别

  • 对嵌入式数据模型的支持减少了数据库上的 I/O 活动 系统。
  • 索引支持更快的查询,并且可以包含来自嵌入式的键 文档和数组。

2、查询接口

MongoDB Query API 支持读写 操作(CRUD)以及:

  • 数据聚合
  • 文本搜索和地理空间查询。

3、高可用性

MongoDB的复制工具,称为副本集提供:

  • 自动故障转移
  • 数据冗余。

一个副本集是一组 维护相同数据集的MongoDB服务器,提供冗余 以及提高数据可用性。

4、水平可扩展性

MongoDB提供水平可扩展性作为其核心功能的一部分:

  • 分片跨 计算机群集。
  • 从3.4开始,MongoDB支持创建区的数据基于分片键.在一个 平衡集群,MongoDB直接读取和写入区域覆盖 只到区域内的那些碎片。请参阅的​​区​​手册页了解更多信息。

5、支持多个存储引擎

MongoDB支持多个存储引擎:

  • WiredTiger 存储引擎(包括对静态加密)
  • In-Memory存储引擎。

此外,MongoDB提供了可插拔的存储引擎API,允许 为MongoDB开发存储引擎的第三方

6、MongoDB的体系结构与术语

MongoDB 是最像关系型数据库的非关系型数据库,之所以这样子说,是因为它的体系结构和MySQL 是比较像的。

我们通过对比的形式对 MongoDB 的体系结构做一个初步的了解。

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

表中的一条数据

column

field

数据字段/域

index

index

索引

table joins


表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

三、SpringBoot整合MongoDB

1、添加MongoDB依赖

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2、配置文件

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(聚合): 聚合主要用于数据处理,例如统计平均值、求和等。

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是用于操作数据库的类

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代码:

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作为类中的属性来使用。

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);
}
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);
}
}
@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);
}
}

标签:return,SpringBoot,MongoDB,id,book,简介,public,String
From: https://blog.51cto.com/Doker/6132608

相关文章

  • Azure DNS Private Resolver 简介
    下边介绍一个还算是比较新一点的服务,AzureDNSPrivateResolver,听名字就知道是和DNS相关的了,其实对云了解比较多的看名字会觉得和Azure的某友商一个服务名字很像,其实不光名......
  • 你能说出SpringBoot自动装配的原理吗
    SpringBoot目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。在过去,我们要让一个Spring项......
  • SpringBoot+Vue+EasyExcel实现excel简单导入导出
    1.先导入EasyExcel依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.......
  • day07-SpringBoot接收参数相关注解
    SpringBoot接收参数相关注解1.基本介绍SpringBoot接收客户端提交数据/参数会使用到相关注解详解@PathVariable、@RequestHeader、@ModelAttribute、@RequestParam、@Co......
  • SpringBoot集成Swagger错误总结
    错误展示rorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.2023-03-1915:37:55.307ERROR12980---......
  • 【framework】DisplayContent简介
    1前言​DisplayContent用于管理屏幕,一块屏幕对应一个DisplayContent对象,虽然手机只有一个显示屏,但是可以创建多个DisplayContent对象,如投屏时,可以创建一个虚拟......
  • 第五天(SpringBoot基础第二篇)
    一、关于starterstater参赛人、发令员SpringBoot中的starter只是把我们某一模块,比如web开发时所需要的所有JAR包打包好给我们而已。不过它的厉害之处在于,能自动把......
  • 第四天(springBoot基础第一篇)
    springBoot基础1.什么是springBoot(概念及其特点)1.概念(1)介绍官网地址: https://spring.io/SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应......
  • SpringBoot 统一页面异常处理
    相关博客:<arel="nofollow"href="https://hcshow.blog.csdn.net/article/details/103081763">SpringBoot统一异常处理</a>第一步:创建项目添加Maven依赖:<dependency>......
  • 【RabbitMQ消息中间件】1.RabbitMQ简介
    一、什么是MQ?MQ为MessageQueue,即是“消息队列”,它是应用程序和应用程序之间的同新方法。遵循MessageQueue规则开发出来的,具有消息队列特点的产品,都可以称之为“消息中间......