我们还需要用于 Java 的 Morphia 吗?

时间:2021-05-05 14:13:09

标签: java mongodb mongodb-java morphia

对于我的项目,我使用 Morphia,以便轻松地将 POJO 对象映射到 Mongodb 数据库。但在 2018 年,mongo java driver 开始支持 pojo 映射自身,而 Morphia 项目被 Mongodb 团队放弃。 Morphia 社区版现在已经弃用了 DAO,我想知道为什么不直接基于 Mongodb 驱动编写自己的 DAO 类?所以我的问题:

我们在使用 Mongodb 和 Java 时还需要 Morphia 吗?直接使用 Mongodb Java 驱动程序,Morphia 带来什么好处?

Example code for using the Java driver:

// Getting an object by id:
collection.find(eq("_id", id), Pojo.class).first();

// Insert into collection
collection.insertOne(pojo);

// Update
collection.replaceOne(eq("_id", id), pojo);

// Delete
collection.deleteMany(filter).getDeletedCount();

1 个答案:

答案 0 :(得分:2)

我是吗啡开发者,所以这里有一些偏见,但我会尽量公平。当我第一次开始在驱动程序中构建 pojo 支持(我曾经为 mongodb 工作)时,我的目标是在驱动程序中构建尽可能接近 ODM,这样吗啡,例如它,只需要成为一个驱动器上的薄饰面。当我离开公司时,我的一些计划从未实现。也就是说,它非常接近。

我知道有几个项目很高兴使用 pojo 编解码器。如果它们符合您的需求,那么我建议您选择它。就我个人而言,我认为 morphia 提供了一些驱动程序不提供的功能(据我所知)。 Morphia 支持注释驱动的索引和文档验证定义,以及集合上限,例如它在映射方面更加强大和宽容。例如,morphia 可以将非字符串键控映射映射为字段,我认为驱动程序不支持。 Morphia 支持生命周期事件,但驱动程序不支持,最后我检查了一下 Morphia 的泛型支持似乎有点优势。 (当然,edge 可能是大多数人不会遇到的极端边缘情况。已经有一段时间了,所以细节很模糊。)

还有一些 Morphia 驱动程序没有的其他功能(例如透明参考支持)和一些我计划驱动程序永远不会支持的功能(构建时生成的编解码器以消除大多数/所有反射运行时,例如)。

那么我们还需要吗啡吗?这取决于你想做什么。不过,我计划在 Morphia 上工作,直到没有人需要它为止。 :)