tio-boot使用mongo-java-driver操作mongodb
在这个示例中,创建了一个使用MongoDB的简单Java Web应用程序。这个应用程序包括了数据库依赖配置、数据库操作工具类、配置类、控制器类以及实际的HTTP请求处理。下面我将详细解释每一部分的作用和逻辑。

  1. MongoDB Java Driver 依赖
    MongoDB Java Driver,这是一个为Java应用程序提供的MongoDB官方驱动程序。
<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.1.0</version>
</dependency>
  1. MongoDb 工具类
  2. 这个类作为MongoDB的客户端和数据库对象的容器。它提供静态方法来存取这些对象,确保你的应用程序可以在需要时连接到数据库。
  3. getDatabase(String databaseName): 连接到指定名称的数据库。
  4. getDatabase(): 获取已经配置好的数据库实例。
  5. setClient(MongoClient mongoClient): 设置MongoDB的客户端实例。
  6. 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;
  }
}
  1. MongoClientConfiguration 配置类
  2. 这个类是你应用程序的配置类,它负责设置和初始化MongoDB客户端。
  3. 它创建了数据库的地址和凭证,并用这些信息初始化了MongoClient。
  4. 然后它使用MongoClient来连接到数据库,并将这个连接保存在MongoDb工具类中,以便全局使用。
  5. 最后,它向TioBootServer添加了一个销毁方法,以确保在应用程序关闭时MongoClient也会被正确关闭。
package com.litongjava.tio.web.hello.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.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

@AConfiguration
public class MongoClientConfiguration {

  @AInitialization
  public void config() {

    String mongodbHost = "192.168.3.9";
    int mongodbPort = 27017;
    String mongodbSourceName = "admin";
    String mongodbUsername = "admin";
    String mongodbPassword = "Litong@123";

    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, mongodbSourceName,
        mongodbPassword.toCharArray());
    credentials.add(mongoCredential);

    // 通过连接认证获取MongoDB连接
    MongoClient mongoClient = new MongoClient(adds, credentials);

    // 连接到数据库
    MongoDatabase mongoDatabase = mongoClient.getDatabase(mongodbSourceName);

    // 保持client and database;
    MongoDb.setClient(mongoClient);
    MongoDb.setDatabase(mongoDatabase);

    // 添加addDestroyMethod
    TioBootServer.addDestroyMethod(mongoClient::close);
  }
}
  1. MongdbController 控制器类
  2. 这个类处理实际的HTTP请求,并利用MongoDb工具类与MongoDB数据库进行交互。
  3. add(): 添加一个新的文档到 user 集合中。
  4. list(): 检索 user 集合中的所有文档。
  5. listDevices(): 从另一个数据库 penhubdevices 集合中检索所有文档。
package com.litongjava.tio.web.hello.controller;

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

import org.bson.Document;

import com.litongjava.tio.http.server.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;
  }
}
  1. 测试访问
  2. 这部分给出了如何通过HTTP请求调用你的服务的示例。
  3. 请求 http://localhost/mongodb/add 会在数据库中添加一个新的用户。
  4. 请求 http://localhost/mongodb/list 会列出所有用户。
  5. 请求 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
  }
]

李通
215 声望0 粉丝