Java 我们还需要 Morphia 吗?

Do we still need Morphia for Java?

对于我的项目,我使用 Morphia, for easily mapping POJO objects to the Mongodb database. But in 2018 the mongo java driver started supporting pojo mapping it self and the Morphia project was abandoned by the Mongodb team. The Morphia community edition has now deprecated the DAO 我想知道,为什么不直接基于 Mongodb 驱动程序编写我自己的 DAO class?所以我的问题:

使用Mongodb和Java时还需要Morphia吗? Morphia直接使用MongodbJava驱动有什么好处?

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();

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

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

还有一些 Morphia 具有驱动程序不具备的其他功能(例如透明引用支持)和一些我计划驱动程序永远不会支持的功能(构建时生成的编解码器以消除 most/all 在 运行 时间反射,例如)。

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