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