之前看到一些mongoDB的java操作方式,但是要不做反射,要不就会创建很多操作对象,这样比较麻烦,下面这种方式只需要一个操作对象就可以获取所有的Entity,直接上代码
public interface MongoDao<T> {
/**
* 通过条件查询实体(集合)
*
* @param query
*/
public List<T> find(Query query, Class<T> entity) ;
/**
* 通过条件查询实体(集合)
*
*/
public List<T> findAll(Class<T> entity) ;
/**
* 通过一定的条件查询一个实体
*
* @param query
* @return
*/
public T findOne(Query query, Class<T> entity) ;
/**
* 保存一个对象到mongodb
*
* @param entity
* @return
*/
// public T save(T entity) ;
/**
* 通过ID获取记录
*
* @param id
* @return
*/
public T findById(String id, Class<T> entity) ;
/**
* 通过ID获取记录,并且指定了集合名(表的意思)
*
* @param id
* @param collectionName
* 集合名
* @return
*/
public T findById(String id, String collectionName, Class<T> entity) ;
/**
* 分页查询
* @param page
* @param query
* @return
*/
public Page<T> findPage(Page<T> page,Query query, Class<T> entity);
/**
* 求数据总和
* @param query
* @return
*/
public long count(Query query, Class<T> entity);
}
实现类
public class MongoManager<T> implements MongoDao<T> {
protected MongoTemplate mongoTemplate;
public MongoManager(String host, int port, String databaseName) {
try {
mongoTemplate = new MongoTemplate(new Mongo(host, port), databaseName);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
@Override
public List<T> find(Query query, Class entity) {
return mongoTemplate.find(query, entity);
}
@Override
public List<T> findAll(Class<T> entity) {
return mongoTemplate.findAll(entity);
}
@Override
public T findOne(Query query, Class<T> entity) {
return mongoTemplate.findOne(query, entity);
}
@Override
public T findById(String id, Class<T> entity) {
return mongoTemplate.findById(id, entity);
}
@Override
public T findById(String id, String collectionName, Class<T> entity) {
return mongoTemplate.findById(id, entity, collectionName);
}
@Override
public Page<T> findPage(Page<T> page, Query query, Class<T> entity) {
long count = count(query, entity);
// page.setTotal(count);
int pageNumber = page.getNumber();
int pageSize = page.getSize();
query.skip((pageNumber - 1) * pageSize).limit(pageSize);
List<T> rows = this.find(query, entity);
page = new PageImpl(rows);
// page.setRows(rows);
return page;
}
@Override
public long count(Query query, Class<T> entity) {
return mongoTemplate.count(query, entity);
}
}
调用:
mongoManager.findAll(XXX.class);