java 对mongodb操作封装工具类

news2024/12/24 16:35:04

在 Java 中,封装 MongoDB 操作的工具类是非常常见的做法。使用 MongoDB 官方的 Java 驱动程序,结合常用的工具类封装,可以使得与 MongoDB 的交互更加方便和清晰。下面是一个简单的 MongoDB 操作封装工具类的示例代码。

前提

首先,确保你已经在项目中引入了 MongoDB Java 驱动的依赖。你可以使用 Maven 或 Gradle 来添加依赖。

Maven 依赖:
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>4.9.0</version> <!-- 请检查最新版本 -->
</dependency>

MongoDB 工具类封装

1. MongoDB 工具类

这个类包含了与 MongoDB 交互的常见操作,如获取数据库、获取集合、插入、查询、更新、删除等。

import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import org.bson.Document;
import org.bson.conversions.Bson;

import java.util.ArrayList;
import java.util.List;

public class MongoDBUtil {

    private static final String URI = "mongodb://localhost:27017";  // MongoDB 连接字符串
    private static final String DATABASE_NAME = "testdb";           // 默认数据库名
    private static MongoClient mongoClient;
    private static MongoDatabase database;

    // 静态初始化,建立数据库连接
    static {
        mongoClient = MongoClients.create(URI);
        database = mongoClient.getDatabase(DATABASE_NAME);
    }

    // 获取数据库实例
    public static MongoDatabase getDatabase() {
        return database;
    }

    // 获取集合实例
    public static MongoCollection<Document> getCollection(String collectionName) {
        return database.getCollection(collectionName);
    }

    // 插入一条记录
    public static void insertOne(String collectionName, Document document) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.insertOne(document);
    }

    // 插入多条记录
    public static void insertMany(String collectionName, List<Document> documents) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.insertMany(documents);
    }

    // 查找单条记录
    public static Document findOne(String collectionName, Bson filter) {
        MongoCollection<Document> collection = getCollection(collectionName);
        return collection.find(filter).first();
    }

    // 查找所有记录
    public static List<Document> findAll(String collectionName) {
        MongoCollection<Document> collection = getCollection(collectionName);
        List<Document> result = new ArrayList<>();
        collection.find().forEach(result::add);
        return result;
    }

    // 查找满足条件的记录
    public static List<Document> find(String collectionName, Bson filter) {
        MongoCollection<Document> collection = getCollection(collectionName);
        List<Document> result = new ArrayList<>();
        collection.find(filter).forEach(result::add);
        return result;
    }

    // 更新一条记录
    public static void updateOne(String collectionName, Bson filter, Bson update) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.updateOne(filter, update);
    }

    // 更新多条记录
    public static void updateMany(String collectionName, Bson filter, Bson update) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.updateMany(filter, update);
    }

    // 删除一条记录
    public static void deleteOne(String collectionName, Bson filter) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.deleteOne(filter);
    }

    // 删除多条记录
    public static void deleteMany(String collectionName, Bson filter) {
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.deleteMany(filter);
    }

    // 关闭 MongoDB 连接
    public static void close() {
        if (mongoClient != null) {
            mongoClient.close();
        }
    }

    public static void main(String[] args) {
        // 测试 MongoDB 操作
        MongoDBUtil.insertOne("users", new Document("name", "John").append("age", 30));
        MongoDBUtil.insertMany("users", List.of(
                new Document("name", "Jane").append("age", 25),
                new Document("name", "Mike").append("age", 35)
        ));

        Document user = MongoDBUtil.findOne("users", Filters.eq("name", "John"));
        System.out.println(user.toJson());

        List<Document> allUsers = MongoDBUtil.findAll("users");
        allUsers.forEach(u -> System.out.println(u.toJson()));

        MongoDBUtil.updateOne("users", Filters.eq("name", "John"), Updates.set("age", 31));
        MongoDBUtil.deleteOne("users", Filters.eq("name", "Mike"));

        MongoDBUtil.close(); // 关闭连接
    }
}

2. 功能解释

连接 MongoDB
  • MongoClients.create(URI):创建 MongoDB 客户端连接。
  • mongoClient.getDatabase(DATABASE_NAME):获取指定名称的数据库实例。
数据库操作
  • insertOne():插入单条数据。
  • insertMany():插入多条数据。
  • findOne():查询单条记录,返回符合条件的第一条文档。
  • findAll():查询集合中的所有文档。
  • find():根据查询条件查找所有符合条件的记录。
  • updateOne():更新符合条件的第一条记录。
  • updateMany():更新所有符合条件的记录。
  • deleteOne():删除符合条件的第一条记录。
  • deleteMany():删除所有符合条件的记录。
连接关闭
  • mongoClient.close():关闭 MongoDB 客户端连接。

3. 使用该工具类

您可以像上面代码中的 main 方法那样,使用该工具类进行各种 MongoDB 操作。

4. 异常处理和连接池

在生产环境中,通常建议:

  • 异常处理:对数据库连接或操作进行异常捕获,避免应用崩溃。
  • 连接池:对于高并发的应用,可以考虑使用 MongoDB 提供的连接池机制,以提高性能。

5. 改进和扩展

您可以根据需要扩展这个工具类:

  • 增加更多查询功能:比如分页查询、排序、聚合查询等。
  • 更复杂的更新:例如使用 upsert(如果文档不存在则插入)等操作。

通过这个封装类,您可以简化 MongoDB 操作的复杂性,并且使得代码更具可维护性。

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

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

相关文章

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能&#xff0c;而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢&#xff0c;在查看文档时影响尚可接受&#xff0c;但在快速浏览网页时&#xff0c;滚轮速度过慢会给用户带来…

GitLab的安装与卸载

目录 GitLab安装 GitLab使用 使用前可选操作 修改web端口 修改Prometheus端口 使用方法 GitLab的卸载 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 gitlab-ce-10.8.4 GitLab安装 Gitlab的rpm包集成了它需要的软件&#xff0c;简化了安装步骤&#xff0c;所以直接…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集&#xff0c;对9900张原始图片进行YOLO&#xff0c;COCO&#xff0c;VOC格式的标注 数据集分割 训练组 70&#xff05; 6930图片 有效集 20&#xff05; 1980图片 测试集 10&#xff05; 990图片 预处理 静态裁剪&#xff1a; 24-82&…

YOLOv8 | 训练自定义数据集

目录 1 处理数据集1.1 数据集格式介绍1.2 划分数据集1.3 在 YOLOv8 中配置数据集 2 训练 YOLOv8 模型2.1 模型训练代码2.2 开启 TensorBoard 若尚未部署 YOLOv8&#xff0c;则可参考这篇博客&#xff1a; YOLOv8 | Windows 系统下从零开始搭建 YOLOv8 项目环境 1 处理…

Java设计模式 —— 【结构型模式】外观模式详解

文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部子系统的具体的细节&#xff0c;这…

可编辑99PPT | 智能工厂整体规划方案及实施细部方案

荐言分享&#xff1a;智能工厂是利用物联网、大数据、人工智能等先进技术&#xff0c;实现生产过程自动化、智能化和柔性化的现代工厂。本整体规划方案旨在通过整合信息技术、自动化技术、人工智能技术和物联网技术&#xff0c;构建一个高效、灵活、绿色、可持续的生产环境&…

Allegro17.4创建异形焊盘速通

Allegro17.4创建异形焊盘速通 打开Padstack Editor 17.4&#xff0c;新建焊盘&#xff0c;以标贴焊盘为例: 该标贴焊盘是在底面&#xff0c;选择END LAYRE &#xff0c;选择 Shape symbol Geometry&#xff0c;Shape symbol选择框右边有选择键&#xff0c;跳到Library Shape S…

多行为级联24|多行为推荐的超图增强级联图卷积网络

挂到arxiv上的&#xff0c;多行为级联超图加对比学习,超图是针对单个行为的&#xff0c;而不是针对多个行为的。参考的类似工作是CRGCN加MBSSL。这两篇我都做了论文阅读&#xff0c;&#xff08;CRGCN正在路上&#xff0c;MBSSL是我的第一篇论文阅读帖子&#xff09;推荐系统论…

利用.NET Upgrade Assitant对项目进行升级

本教程演示如何把WPF程序从 <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>升级到<TargetFramework>net8.0-windows</TargetFramework>. 下载并安装.NET Upgrade Assistant - Visual Studio Marketplace Supported .NET upgrades: .NET Frame…

Vue2四、 scoped样式冲突,data是一个函数,组件通信-父传子-子传父-非父子

组件通信 1. 父组件通过 props 将数据传递给子组件 2. 子组件利用 $emit 通知父组件修改更新 父--->子 子--->父

第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ

Q1、统计符合条件长度为3的子数组数目 1、题目描述 给你一个整数数组 nums &#xff0c;请你返回长度为 3 的子数组&#xff0c;满足第一个数和第三个数的和恰好为第二个数的一半。 子数组 指的是一个数组中连续 非空 的元素序列。 2、解题思路 我们需要在给定的数组 nums…

PSDK的编译与ROS包封装

本文档讲述在NIVIDIA开发板上使用大疆提供的Payload SDK获取无人机实时GPS信息的方法&#xff0c;以及基于Payload SDK发布ROS GPS话题信息的方法。 文章目录 0 实现目标1 Payload SDK1.1 PSDK 源码的编译1.2 PSDK 的使用 2 遥测数据的读取2.1 示例代码结构2.2 读取机载GPS信息…

铝电解电容使用寿命

铝电解电容寿命问题 铝电解电容为什么会失效&#xff1f;铝电解电容失效与那些因素有关&#xff1f;电解电容寿命如何计算&#xff1f; 1铝电解电容为什么会失效&#xff1f; 电容都是由两个导电板并排放到一起就构成了。正极是铝&#xff08;阳极箔&#xff09;&#xff0c;…

用Python PySide6 复刻了两软件UI 做下练习

图样 1 代码 1&#xff1a; # -*- coding: utf-8 -*-import sys from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, QDate) from PySide6.QtGui import QIcon, QPixmap, QColor from PySide6.QtWidgets import (QApplication, QDialog, QLineEdit, QPushBut…

安装MongoDB,环境配置

官网下载地址&#xff1a;MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…

Spring学习(一)——Sping-XML

一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成&#xff1a;分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…

重温设计模式--职责链模式

文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它旨在将请求的发送者和多个接收者解耦&#xff0c;让多个对象都有机会处理请求&a…

easegen将教材批量生成可控ppt课件方案设计

之前客户提出过一个需求&#xff0c;就是希望可以将一本教材&#xff0c;快速的转换为教学ppt&#xff0c;虽然通过人工程序脚本的方式&#xff0c;已经实现了该功能&#xff0c;但是因为没有做到通用&#xff0c;每次都需要修改脚本&#xff0c;无法让客户自行完成所有流程&am…

高考志愿填报:如何制定合理的志愿梯度?

高考志愿填报中常见的避雷行为&#xff0c;深入分析了专业选择、招生政策了解、学校选择、备选方案准备以及防诈骗等方面的关键问题&#xff0c;并提出了针对性的建议与策略。旨在为考生和家长提供实用的指导&#xff0c;助力考生科学合理地填报高考志愿&#xff0c;避免陷入各…