MongoDB安全及系例全教程

news2024/11/26 8:55:05

一、系列文章目录

一、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的依赖


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用扩散AI生成的合成数据的质量评估方法【4个指标】

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 为了生成有用的图像数据集&#xff0c;我们使用真实世界的照片数据集作为指南针&#xff0c;探索即时工程的艺术。 我们的稳定扩散&#xff08;…

PPT模板,免费下载!

找免费PPT模板就上这6个网站&#xff0c;各种模板、素材都能找到&#xff0c;质量还很高&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒…

红海云签约中国煤科信息公司,数智引领科技型国企人力资源数字化变革

中煤科工集团信息技术有限公司&#xff08;以下简称“中国煤科信息公司”&#xff09;隶属于中国煤炭科工集团&#xff0c;作为中国煤科核心软件的研发中心、数据技术中心、内部信息化支撑中心&#xff0c;是中国煤科加快智能矿山建设和数字化转型的核心力量。 基于对数字化转…

软件设计模式原则(一)迪米特法则

开一个小专题——详细总结一下软件设计模式原则&#xff0c;这部分在《软计》和《java设计模式》中算是很重要的知识点&#xff0c;值得展开详细讲解一下~首先介绍的是【迪米特法则】 一.定义 迪米特法则又称为最少知识原则&#xff0c;其定义为&#xff1a;一个软件实体应当尽…

vue使用JsBarcode生成条形码

在工作中&#xff0c;有一个需求是接口返回的订单号生成条形码&#xff0c;如图&#xff1a; 1.安装依赖 yarn add jsbarcode2.引入 在script标签中引入 import JsBarcode from jsbarcode 3.使用 this.$refs.a.src的值为条形码的地址。 <template><div><img…

linux下多机器ssh免密码登录配置

20,21,22,23等4台机器配置ssh免密登陆 确认sshd配置 查看/etc/ssh/sshd_config文件&#xff0c;确认如下配置没有被注释掉&#xff1a; AuthorizedKeysFile .ssh/authorized_keys每一台机器修改hosts配置主机名&#xff08;可选&#xff09; 执行ssh命令&#xff0c;如…

积分球测试粉末反射率

积分球测试粉末主要是基于光在积分球内的反射和混合。具体来说&#xff0c;当光线进入积分球时&#xff0c;它将在球的内表面上进行反射。由于积分球的内表面是高反射材料&#xff0c;所以大部分光线将被反射&#xff0c;而不会逃逸出球体。在积分球内&#xff0c;光线经过多次…

基于51单片机的全自动洗衣机系统设计

**单片机设计介绍&#xff0c;基于51单片机的全自动洗衣机系统设计(仿真、程序、论文) 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的全自动洗衣机系统是一种集成控制、传感、显示等功能于一体的智能洗衣机系统&a…

Security ❀ UDP/TCP传输层常见DOS攻击详解

文章目录 1. UDP协议基础2. UDP Flood2.1. 攻击原理2.2. 防护方法 3. TCP三次握手和四次挥手3.1. 三次握手3.2. 四次挥手 4. SYN Flood4.1. 攻击原理4.2. 防护方法 5. SYN-ACK Flood5.1. 攻击原理5.2. 防护方法 6. ACK Flood6.1. 攻击原理6.2. 防护方法 7. FIN/RST Flood7.1. 攻…

来可电子基于UDS的ECU刷写方案

车辆电子控制单元&#xff08;ECU&#xff09;的刷写方式也正在发生重大变化。传统的ECU刷写方法通常使用CAN卡连接电脑进行&#xff0c;现在越来越多的汽车商家和软件开发人员开始采用基于总线UDS来进行ECU刷写。 1、通过我们LKmast上位机软件编写配置刷写步骤 2、导入到我们…

python将图片序列保存成gif

这里用到的模块是imageio。用imageio.mimsave即可将图片序列保存成gif动态图。以下是本人编写的小实验&#xff1a; import cv2 import imageiopaths ["./images/0001.png", "./images/0002.png", "./images/0003.png", ...] frames [] for i…

瑞禧生物分享纳米粉体~二硫化钼粉体 MoS2 纯度:99% 纳米二硫化钼(MoS2)

二硫化钼粉体 名称&#xff1a;二硫化钼粉体 纯度&#xff1a;99% 外观&#xff1a;粉末 纳米二硫化钼(MoS2)粉体硫化钼粉体 二硫化铝化学性质稳定、热稳定性好 、摩擦系数低 、润滑作用优 良且在较为苛 刻的工作环境下能保持 良好的摩擦性能因此二硫化铝被广泛应用于固体润…

一键报警可视对讲管理机10寸触摸屏管理机

一键报警可视对讲管理机10寸触摸屏管理机 一、管理机技术指标&#xff1a; 1、10寸LCD触摸屏&#xff0c;分辨率1024*600&#xff1b; 2、摄像头1200万像素 3、1000M/100M自适应网口&#xff1b; 4、按键设置&#xff1a;报警/呼叫按键&#xff0c;通话/挂机按键&#xff0…

count+group by

一、count()函数 1、count(*) 把所有的行数都查询出来&#xff0c;除非该行中所有的数据为null SELECTCOUNT(*) FROMemployees结果&#xff1a;107 2、count(commission_pct) 把指定列中所有的行数查出来&#xff0c;只要一行为null&#xff0c;那就不计数 SELECTCOUNT(com…

【Qt-22】Qt乱码问题解决

最近在Qt项目中遇到TCP通信接收数据乱码的问题&#xff0c;很是苦恼&#xff0c;经过多次尝试&#xff0c;终于得以解决。 感谢Qt TcpSocket 传递数据乱码显示_qt中socket接受到的客户端数据显示不出来-CSDN博客 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_XX風的博客…

采购供应链思维导图

供应链采购&#xff0c;是指企业根据生产需要&#xff0c;通过与供应商签订合同&#xff0c;由供应商提供原材料、零部件、包装材料等&#xff0c;企业负责产品的制造&#xff0c;并将产品销售给用户的一种交易方式。 供应链管理 横向:采购把东西买进来&#xff0c;生产去加工增…

windows 使用 EasyScreenLive 和 EasyDarwin 软件实现相机 rtsp 推流

1. 下载软件 实现 rtsp 推流&#xff0c;需要运行&#xff08;1&#xff09;rtsp 服务器、&#xff08;2&#xff09;rtsp 推流客户端。 rtsp 服务器 EasyDarwin&#xff1a;https://github.com/EasyDarwin/EasyDarwin rtsp 推流客户端 EasyScreenLive&#xff1a;https://git…

打造个人的Minecraft服务器:Java+cpolar实现我的世界联机游戏

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

GCN火车票识别项目 P2 图卷积神经网络介绍

深度学习一直都是被几大经典模型统治着&#xff0c;常见的有CNN、RNN网络&#xff0c;它们在CV和NLP领域都取得了优异的效果。但人们发现了很多CNN、RNN无法解决&#xff0c;或者效果不好的问题——图结构数据&#xff0c;如社交网络、人物关系、分子结构等&#xff0c;所以就有…