MongoDB 是时下非常流行的非关系型数据库, Vertx 也对它提供了很好的支持。本文演示如何用 Vertx 的 MongoDB client。
加入依赖
在项目的 pom.xml 文件中,添加 MongoDB client。
1 | <dependency> |
获取连接实例
在 Vertx MongoDB Client 中, 对 MongoDB 的访问都包装在 MongoClient 这个类中。因此我们首先需要获取 MongoClient。 在这里,我们设计一个简单的单例来封装这部分的逻辑,代码如下:
1 | 4j |
MONGODB_SHARE_POOL_NAME 是定义在 MongoDefault 这个类中的一个字符串常量,用来指定共享名,这样,在同一个 Vertx 的上下文中,就可以使用 MongoClient 的共享池。
定义抽象实体类
在 Vertx 中, MongoDB client 可以直接对 JsonObject (Vertx的”一等公民”)进行操作,但在企业开发中,我们往往习惯于操作实体类,因此在这里定义一个抽象的实体类来包装 JsonObject 和实体之间这转换。 代码如下:
1 | true) (ignoreUnknown = |
定义回调接口
因为在 Vertx 中的 API 都设计为以回调的方法来返回值,为后续进行统一处理方法,我们定义要给回调的包装接口:
1 | public interface MResultHandler<T> { |
和一个对应的类:
1 |
|
定义查询方法
首先,定义一个通用的,通过查找条件 (query) 来查询一整个对象(文档,记录)的方法:
1 | protected void findOne(JsonObject query, MResultHandler<T> handler) { |
稍加包装,就可以得到要给通过主键(“_id”)来查找一整个对象(文档,记录)的方法:
1 | public void findByPK(String pk, MResultHandler<T> handler) { |
定义新增方法
在新增中,可以考虑由 MongoDB 自己生成 _id 的情况和用户指定的情况, 代码如下:
1 | public void insert(T t, boolean removeId, MResultHandler<String> mh) { |
定义更新方法
在更新中,我们通过判断影响的文档(记录)数来判断更新是否成功, 代码如下:
1 | private static final UpdateOptions DEFAULT_UPDATE_OPTIONS = new UpdateOptions(false, false); |
定义删除方法
1 | public void remove(JsonObject query, MResultHandler<JsonObject> handler) { |