tio-boot 使用 mongo-java-driver 操作 mongodb
在这个示例中,创建了一个使用 MongoDB 的简单 Java Web 应用程序。这个应用程序包括了数据库依赖配置、数据库操作工具类、配置类、控制器类以及实际的 HTTP 请求处理。下面我将详细解释每一部分的作用和逻辑。
- MongoDB Java Driver 依赖 MongoDB Java Driver,这是一个为 Java 应用程序提供的 MongoDB 官方驱动程序。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.1.0</version>
</dependency>
- MongoDb 工具类
- 这个类作为 MongoDB 的客户端和数据库对象的容器。它提供静态方法来存取这些对象,确保你的应用程序可以在需要时连接到数据库。
getDatabase(String databaseName)
: 连接到指定名称的数据库。getDatabase()
: 获取已经配置好的数据库实例。setClient(MongoClient mongoClient)
: 设置 MongoDB 的客户端实例。setDatabase(MongoDatabase mongoDatabase)
: 设置 MongoDB 的数据库实例。
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
public class MongoDb {
private static MongoClient mongoClient;
private static MongoDatabase mongoDatabase;
public static MongoDatabase getDatabase(String databaseName) {
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
return mongoDatabase;
}
public static MongoDatabase getDatabase() {
return mongoDatabase;
}
public static void setClient(MongoClient mongoClient) {
MongoDb.mongoClient = mongoClient;
}
public static void setDatabase(MongoDatabase mongoDatabase) {
MongoDb.mongoDatabase = mongoDatabase;
}
}
- MongoClientConfiguration 配置类 配置文件 app.properties
mongodb.host=192.168.3.9
mongodb.port=27017
mongodb.authSource=admin
mongodb.username=admin
mongodb.password=Litong@123
mongodb.database=penhub
- 这个类是你应用程序的配置类,它负责设置和初始化 MongoDB 客户端。
- 它创建了数据库的地址和凭证,并用这些信息初始化了 MongoClient。
- 然后它使用 MongoClient 来连接到数据库,并将这个连接保存在 MongoDb 工具类中,以便全局使用。
- 最后,它向
TioBootServer
添加了一个销毁方法,以确保在应用程序关闭时 MongoClient 也会被正确关闭。
package com.enoleap.manglang.pen.api.server.config;
import java.util.ArrayList;
import java.util.List;
import com.litongjava.jfinal.aop.annotation.AConfiguration;
import com.litongjava.jfinal.aop.annotation.AInitialization;
import com.litongjava.tio.boot.server.TioBootServer;
import com.litongjava.tio.utils.environment.EnvUtils;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
@AConfiguration
public class MongoClientConfiguration {
@Initialization
public void config() {
// String mongodbHost = "192.168.3.9";
// int mongodbPort = 27017;
// String mongodbAuthSource = "admin";
// String mongodbUsername = "admin";
// String mongodbPassword = "Litong@123";
String mongodbHost = EnvUtils.getStr("mongodb.host");
int mongodbPort = EnvUtils.getInt("mongodb.port");
String mongodbAuthSource = EnvUtils.get("mongodb.authSource");
String mongodbUsername = EnvUtils.get("mongodb.username");
String mongodbPassword = EnvUtils.get("mongodb.password");
String mongodbDatabase = EnvUtils.get("mongodb.database");
List<ServerAddress> adds = new ArrayList<>();
// ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress(mongodbHost, mongodbPort);
adds.add(serverAddress);
List<MongoCredential> credentials = new ArrayList<>();
// MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(mongodbUsername, mongodbAuthSource,
mongodbPassword.toCharArray());
credentials.add(mongoCredential);
// 通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(adds, credentials);
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(mongodbDatabase);
// 保持client and database;
MongoDb.setClient(mongoClient);
MongoDb.setDatabase(mongoDatabase);
// 添加addDestroyMethod
TioBootServer.addDestroyMethod(mongoClient::close);
}
}
- MongdbController 控制器类
- 这个类处理实际的 HTTP 请求,并利用 MongoDb 工具类与 MongoDB 数据库进行交互。
add()
: 添加一个新的文档到user
集合中。list()
: 检索user
集合中的所有文档。listDevices()
: 从另一个数据库penhub
的devices
集合中检索所有文档。
package com.litongjava.tio.web.hello.controller;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.litongjava.annotation.RequestPath;
import com.litongjava.tio.web.hello.config.MongoDb;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
@RequestPath("/mongodb")
public class MongdbController {
public String add() {
// 获取数据库连接对象
MongoDatabase database = MongoDb.getDatabase();
// 获取集合
MongoCollection<Document> collection = database.getCollection("user");
// 要插入的数据
Document document = new Document("name", "张三").append("sex", "男").append("age", 18);
// 插入如下
collection.insertOne(document);
return "success";
}
public List<Document> list() {
MongoDatabase database = MongoDb.getDatabase();
MongoCollection<Document> collection = database.getCollection("user");
// 查找集合中的所有文档,并遍历
FindIterable<Document> iterable = collection.find();
MongoCursor<Document> cursor = iterable.iterator();
List<Document> lists = new ArrayList<>();
while (cursor.hasNext()) {
Document doucment = cursor.next();
lists.add(doucment);
}
return lists;
}
public List<Document> listDevices(){
MongoDatabase database = MongoDb.getDatabase("penhub");
MongoCollection<Document> collection = database.getCollection("devices");
// 查找集合中的所有文档,并遍历
FindIterable<Document> iterable = collection.find();
MongoCursor<Document> cursor = iterable.iterator();
List<Document> lists = new ArrayList<>();
while (cursor.hasNext()) {
Document doucment = cursor.next();
lists.add(doucment);
}
return lists;
}
}
- 测试访问
- 这部分给出了如何通过 HTTP 请求调用你的服务的示例。
- 请求
http://localhost/mongodb/add
会在数据库中添加一个新的用户。 - 请求
http://localhost/mongodb/list
会列出所有用户。 - 请求
http://localhost/mongodb/listDevices
会从另一个集合中列出所有设备。
在整个流程中,你的应用程序通过 MongoClientConfiguration
类配置和初始化 MongoDB 连接,MongoDb
类作为连接的持有者,并在需要时提供连接。控制器 MongdbController
则处理来自客户端的请求,并使用 MongoDb
类与数据库进行交互。 http://localhost/mongodb/list 接口返回的数据
[
{
"_id":
{
"counter": 2147426,
"date": "2024-01-21 15:52:04",
"machineIdentifier": 13249596,
"processIdentifier": 14600,
"time": 1705888324000,
"timeSecond": 1705888324,
"timestamp": 1705888324
},
"name": "张三",
"sex": "男",
"age": 18
}
]