在 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 操作的复杂性,并且使得代码更具可维护性。