5

我试图找出 Jongo 的优势,而不是简单地使用 (DBObject)JSON.parse(...) 解组 json 命令并以以下方式使用 DBObject。

有性能优势吗?

    @Override
public List<T> getEntityList(Integer limit, String query) throws Exception {
    log.entering(DaoImpl.class.toString(), "getEntityList, with criteria of " + query);
    DBObject criteriaObject = null;
    ArrayList<T> list = new ArrayList<T>();

    if (query != null)
        criteriaObject = (DBObject)JSON.parse(query);

    DBCursor cursor = null;

    try {
        if (criteriaObject != null) {
            log.log(Level.FINEST, "getting the objects using a search criteria: " + criteriaObject);
            cursor = MongoDB.getInstance().getCollection(collection).find(criteriaObject);
        } else {
            log.log(Level.FINEST, "getting the objects without a criteria");
            cursor = MongoDB.getInstance().getCollection(collection).find();
        }

        ............etc, etc, etc

谢谢!

4

2 回答 2

2

Jongo .3 用相同的方式解组 Mongo 查询JSON.parse(query)。优点是您从数据库中获取结果的方式。在您的示例中,您必须遍历游标,自己调整每个属性和子属性。

DBObject dbo = JSON.parse("{age: 18}");
DBCursor results = users.find(dbo);
for (DBObject result : results) {
    User user = new User();
    user.setUsername((String) result.get("username"));
    user.setAge((Integer) result.get("age"));
    user.setAddress(new Address(..));
}

使用 Jongo,您可以直接操作对象:

Iterable<User> users = collection.find("{age: 18}").as(User.class);

Jongo 的表现几乎与车手的表现相当。

于 2013-01-19T14:47:28.443 回答
1

以下是使用 jongo 的一些优点列表:

  • 几乎所有查询都可以模板化:

    friends.find("{name:#, age:#}", "Joe", 18)
    
  • 绑定参数可以是 BSON Primitives 或任何复杂类型:

    friends.find("{address: #}", new Address(..)); 
    
  • 查询和解组与驱动程序一样快。没有杰克逊流程的额外费用
  • 使用 Jackson 功能映射您的 Pojo:多态性、JsonView...

顺便说一句,您的 GSON un/marshaller 可以通过实现Mapper集成到 Jongo 中。

于 2013-01-21T15:55:11.743 回答