java 对mongodb操作封装工具类

在 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.mzph.cn/pingmian/64948.shtml

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

相关文章

事件响应基本流程

虽然安全专业人员努力保护系统免受恶意攻击或人为疏忽&#xff0c;但尽管做出了这些努力&#xff0c;但不可避免地会出现问题。出于这个原因&#xff0c;安全专业人员也扮演着第一响应者的角色。要了解事件响应&#xff0c;首先要了解用于描述各种网络攻击的术语。 违规 失控…

OpenHarmony的分布式服务框架介绍与实现解析

OpenHarmony的分布式服务框架是一个用于实现设备间高效协作与资源共享的重要架构&#xff0c;以下是其详细介绍&#xff1a; 框架概述 OpenHarmony的分布式服务框架基于分布式软总线、分布式数据管理、分布式Profile等技术特性&#xff0c;构建了统一的分布式服务管理机制&am…

Java爬虫获取1688关键字接口详细解析

概述 在电商领域&#xff0c;获取商品信息和价格对于市场分析、价格监控和供应链管理至关重要。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将详细介绍如何利用Java爬虫技术合法合规地获取1688商品关键字接口数据。 前期准备 Java开发环境&#x…

【漏洞复现】BIG-IP Next Central Manager OData 注入漏洞(CVE-2024-21793)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:BIG-IP Next Central Manager OData 注入漏洞漏洞编号:CVE-2024-21793漏洞威胁等级:超危影响范围:BIG-IP Next Central Manage…

vscode 识别git目录

vscode 偶尔无法识别使用git 新托管的项目。 以下是我提供的解决方案——重启 git.enabled VS Code配置问题&#xff1a; 有时候&#xff0c;VS Code的配置可能会导致无法识别.git文件夹。确保你的VS Code配置中启用了Git的相关功能。你可以通过”Settings”&#xff08;设置…

网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析

国内外要闻 Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析 在网络安全的复杂战场中&#xff0c;近期出现了一个值得关注的动态&#xff1a;名为 Rockstar 2FA 的钓鱼即服务&#xff08;PhaaS&#xff09;工具包遭遇变故&#xff0c;意外推动了另一个新生服务 Flo…

抚琴成一快-如何即兴谱例

如何即兴配套谱例 1.即兴01谱例2.即兴02谱例 1.即兴01谱例 2.即兴02谱例 慢推弦&#xff0c;1.5比较合适

希腊字母表

希腊字母 以下是数学和科学中常用的 希腊字母 及其用途的对照表&#xff0c;包括大写和小写形式&#xff1a; 序号字母名称发音&#xff08;英文&#xff09;数学与科学用途1ΑαAlphaˈlfə表示角度、系数、角速度等2ΒβBetaˈbeɪtə 或 ˈbiːtə表示系数、β辐射、概率密…

3090. 每个字符最多出现两次的最长子字符串

题目内容&#xff1a; 给你一个字符串 s &#xff0c;请找出满足每个字符最多出现两次的最长子字符串&#xff0c;并返回该 子字符串 的 最大 长度。 示例 1&#xff1a; 输入&#xff1a; s "bcbbbcba" 输出&#xff1a; 4 解释&#xff1a; 以下子字符串长…

uniapp登录

第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…

[python]pymc3-3.11.0安装后测试代码

测试通过环境&#xff1a; pymc33.11.0 python3.8 测试代码&#xff1a; import arviz as az import matplotlib.pyplot as plt import numpy as np import pymc3 as pm RANDOM_SEED 8927 np.random.seed(RANDOM_SEED) az.style.use("arviz-darkgrid") # True p…

基于微信小程序的短视频系统(SpringBoot)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

深入理解 Linux wc 命令

文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…

HarmonyOs:创建线程的3种方式

使用Worker创建线程 基本概念&#xff1a;Worker主要为应用程序提供多线程运行环境&#xff0c;可让应用程序在执行过程中与宿主线程分离&#xff0c;在后台线程中运行脚本进行耗时操作&#xff0c;避免计算密集型或高延迟任务阻塞宿主线程。使用方法&#xff1a; 创建Worker线…

DataV的安装与使用(Vue3版本)

1、DataV(vue3)地址&#xff1a;DataV Vue3TSVite版 | DataV - Vue3 2、使用 npm install kjgl77/datav-vue3 安装 3、全局引入。 4、此时就可以按需使用了~

云原生服务网格Istio实战

基础介绍 1、Istio的定义 Istio 是一个开源服务网格&#xff0c;它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…

Flutter web - 5 项目打包优化

介绍 目前 flutter 对 web 的打包产物优化较少&#xff0c;存在 main.dart.js 单个文件体积过大问题&#xff0c;打包文件名没有 hash 值&#xff0c;如果有使用 CDN 会存在资源不能及时更新问题。本文章会对这些问题进行优化。 优化打包产物体积 从打包产物中可以看到其中 …

Java 8使用Stream流去除一个list中包含另一个list已存在的某个字段的对象

项目场景&#xff1a; 在Java中&#xff0c;我们经常会遇到需要对List中的数据进行操作的情况。有时候&#xff0c;我们需要从一个List中删除另一个List已经包含的数据。这种情况下&#xff0c;我们可以使用Java Stream来简洁高效地完成操作。 代码示例 假设我们有两个对象列表…

哪些产品可以做FSC森林认证?

FSC森林认证 FSC即森林管理委员会&#xff08;FSC-Forest Stewardship Council&#xff09;的英文缩写&#xff0c;一些民间环保组织、非政府组织以及社会责任感强的企业共同发起并逐渐形成了森林认证。 FSC认证是森林认证&#xff0c;又叫木材认证或统称为认证&#xff0c;是一…

KingbaseES(金仓数据库)入门学习

前言 金仓是一种多进程架构&#xff0c;每一个连接到服务器的会话&#xff0c;在服务器上面都会为该会话分配进程 图形化界面管理 新建数据库名 然后新建一个模式 再创建一个表 新建一个表&#xff0c;然后设置列名 记得要保存 查询数据 也可以新建数据表&#xff0c;用命令…