MongoDB安装及开发系例全教程-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、系列文章目录
二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控
十五、Spring Mongodb—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的依赖
<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);
}
}