opsforlist 存在贼覆盖_morphia基本API方法 - 偷月光的贼 - 博客园

package com.google.code.morphia.dao;

import java.lang.reflect.ParameterizedType;

import java.util.ArrayList;

import java.util.List;

import com.google.code.morphia.Datastore;

import com.google.code.morphia.DatastoreImpl;

import com.google.code.morphia.Key;

import com.google.code.morphia.Morphia;

import com.google.code.morphia.query.Query;

import com.google.code.morphia.query.QueryResults;

import com.google.code.morphia.query.UpdateOperations;

import com.google.code.morphia.query.UpdateResults;

import com.mongodb.DBCollection;

import com.mongodb.Mongo;

import com.mongodb.WriteConcern;

import com.mongodb.WriteResult; /* *

* @author Olafur Gauti Gudmundsson

* @author Scott Hernandez */ @SuppressWarnings({ " unchecked " , " rawtypes " }) public class BasicDAO implements DAO { protected Class entityClazz; protected DatastoreImpl ds; public BasicDAO(Class entityClass, Mongo mongo, Morphia morphia, String dbName) {

initDS(mongo, morphia, dbName);

initType(entityClass);

} public BasicDAO(Class entityClass, Datastore ds) { this .ds = (DatastoreImpl) ds;

initType(entityClass);

} /* *

*

Only calls this from your derived class when you explicitly declare the generic types with concrete classes

*

* {@code class MyDao extends DAO}

*

* */ protected BasicDAO(Mongo mongo, Morphia morphia, String dbName) {

initDS(mongo, morphia, dbName);

initType(((Class ) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ]));

} protected BasicDAO(Datastore ds) { this .ds = (DatastoreImpl) ds;

initType(((Class ) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ]));

} protected void initType(Class type) { this .entityClazz = type;

ds.getMapper().addMappedClass(type);

} protected void initDS(Mongo mon, Morphia mor, String db) {

ds = new DatastoreImpl(mor, mon, db);

} /* *

* Converts from a List to their id values

*

* @param keys

* @return */ protected List> keysToIds(List> keys) {

ArrayList ids = new ArrayList(keys.size() * 2 ); for (Key key : keys)

ids.add(key.getId()); return ids;

} /* * The underlying collection for this DAO */ public DBCollection getCollection() { return ds.getCollection(entityClazz);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#createQuery() */ public Query createQuery() { return ds.createQuery(entityClazz);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#createUpdateOperations() */ public UpdateOperations createUpdateOperations() { return ds.createUpdateOperations(entityClazz);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#getEntityClass() */ public Class getEntityClass() { return entityClazz;

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#save(T) */ public Key save(T entity) { return ds.save(entity);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#save(T, com.mongodb.WriteConcern) */ public Key save(T entity, WriteConcern wc) { return ds.save(entity, wc);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#updateFirst(com.google.code.morphia.query.Query, com.google.code.morphia.query.UpdateOperations) */ public UpdateResults updateFirst(Query q, UpdateOperations ops) { return ds.updateFirst(q, ops);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#update(com.google.code.morphia.query.Query, com.google.code.morphia.query.UpdateOperations) */ public UpdateResults update(Query q, UpdateOperations ops) { return ds.update(q, ops);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#delete(T) */ public WriteResult delete(T entity) { return ds.delete(entity);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#delete(T, com.mongodb.WriteConcern) */ public WriteResult delete(T entity, WriteConcern wc) { return ds.delete(entity, wc);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#deleteById(K) */ public WriteResult deleteById(K id) { return ds.delete(entityClazz, id);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#deleteByQuery(com.google.code.morphia.query.Query) */ public WriteResult deleteByQuery(Query q) { return ds.delete(q);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#get(K) */ public T get (K id) { return ds. get (entityClazz, id);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#findIds(java.lang.String, java.lang.Object) */ public List findIds(String key, Object value) { return (List ) keysToIds(ds.find(entityClazz, key, value).asKeyList());

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#findIds() */ public List findIds() { return (List ) keysToIds(ds.find(entityClazz).asKeyList());

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#findIds(com.google.code.morphia.query.Query) */ public List findIds(Query q) { return (List ) keysToIds(q.asKeyList());

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#exists(java.lang.String, java.lang.Object) */ public boolean exists(String key, Object value) { return exists(ds.find(entityClazz, key, value));

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#exists(com.google.code.morphia.query.Query) */ public boolean exists(Query q) { return ds.getCount(q) > 0 ;

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#count() */ public long count() { return ds.getCount(entityClazz);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#count(java.lang.String, java.lang.Object) */ public long count(String key, Object value) { return count(ds.find(entityClazz, key, value));

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#count(com.google.code.morphia.query.Query) */ public long count(Query q) { return ds.getCount(q);

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#findOne(java.lang.String, java.lang.Object) */ public T findOne(String key, Object value) { return ds.find(entityClazz, key, value). get ();

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#findOne(com.google.code.morphia.query.Query) */ public T findOne(Query q) { return q. get ();

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#find() */ public QueryResults find() { return createQuery();

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#find(com.google.code.morphia.query.Query) */ public QueryResults find(Query q) { return q;

} /* (non-Javadoc)

* @see com.google.code.morphia.DAO#getDatastore() */ public Datastore getDatastore() { return ds;

} public void ensureIndexes() {

ds.ensureIndexes(entityClazz);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值