/** * @Title: MongoService.java * @Description: TODO * @author: Calvinyang * @date: Oct 12, 2014 12:19:22 PM * Copyright: Copyright (c) 2013 * @version: 1.0 */ package edu.fudan.webclient.service; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import edu.fudan.eservice.common.utils.Config; import edu.fudan.eservice.common.utils.MongoUtil; import edu.fudan.webclient.entity.IMongoEntity; /** * @author: Calvinyang * @Description: TODO * @date: Oct 12, 2014 12:19:22 PM */ public class MongoService { /** * 禁止构造此类对象,全部方法为静态 */ private MongoService() {} /** * * @Title: add * @Description: 添加记录 * @param entity * @return */ public static void add(IMongoEntity entity) { DBCollection dbCollection = MongoUtil.getInstance().getCollection(entity.getCollectionName()); dbCollection.insert(entity.toDBObject()); } /** * * @Title: addList * @Description: 批量添加记录 * @param list */ public static void addList(List<IMongoEntity> list) { if (list == null || list.isEmpty()) { return ; } DBCollection dbCollection = MongoUtil.getInstance().getCollection(list.get(0).getCollectionName()); for(IMongoEntity entity : list) { dbCollection.insert(entity.toDBObject()); } } /** * * @Title: delete * @Description: 删除一个记录 * @param query */ public static void delete(IMongoEntity query) { DBCollection dbCollection = MongoUtil.getInstance().getCollection(query.getCollectionName()); dbCollection.remove(query.toDBObject()); } /** * * @Title: deleteList * @Description: 批量删除记录 * @param list */ public static void deleteList(List<IMongoEntity> list) { if (list == null || list.isEmpty()) { return ; } DBCollection dbCollection = MongoUtil.getInstance().getCollection(list.get(0).getCollectionName()); for(IMongoEntity entity : list) { dbCollection.remove(entity.toDBObject()); } } /** * * @Title: getCount * @Description: 统计总条数 * @return */ public static long getCount(String collectionName) { return MongoUtil.getInstance().getCollection(collectionName).getCount(); } /** * * @Title: getCount * @Description: 统计满足条件总条数 * @param query * @return */ public static long getCount(IMongoEntity query) { if (query == null) { throw new NullPointerException("param query null"); } return MongoUtil.getInstance().getCollection(query.getCollectionName()).getCount(query.toDBObject()); } /** * * @Title: getObj * @Description: 查询返回db obj * @param query * @return */ private static DBObject getObj(IMongoEntity query) { return MongoUtil.getInstance().getCollection(query.getCollectionName()).findOne(query.toDBObject()); } /** * * @Title: get * @Description: 条件查询一条记录 * @param query * @return */ public static IMongoEntity get(IMongoEntity query) { DBObject obj = getObj(query); try { return obj == null ? null : query.getClass().newInstance().fromDBObject(obj); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } /** * * @Title: getList * @Description: 条件+排序查询 * @param query * @param order * @return */ public static List<IMongoEntity> getList(IMongoEntity query, DBObject order) { return getList(query, order, 0, Config.getInstance().getInt("query.pagesize")); } /** * * @Title: getList * @Description: 条件+排序+分页查询 * @param query * @param order * @param start * @param limit * @return */ public static List<IMongoEntity> getList(IMongoEntity query, DBObject order, int start, int limit) { DBCollection dbCollection = MongoUtil.getInstance().getCollection(query.getCollectionName()); DBCursor dbCursor = query.toDBObject() == null ? dbCollection.find() : dbCollection.find(query.toDBObject()); if (order != null) { dbCursor.sort(order); } if (start > 0) { dbCursor.skip(start); } if (limit <= 0) { limit = Config.getInstance().getInt("query.pagesize"); } dbCursor.limit(limit); List<IMongoEntity> list = new ArrayList<IMongoEntity>(); Class<?> targetClass = query.getClass(); while(dbCursor.hasNext()) { try { IMongoEntity entity = (IMongoEntity) targetClass.newInstance(); entity.fromDBObject(dbCursor.next()); list.add(entity); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } dbCursor.close(); return list; } /** * * @Title: update * @Description: 更新一条记录 (此方法按照id更新记录) * @param entity */ public static void update(IMongoEntity entity) { if (StringUtils.isEmpty(entity.getId())) { throw new IllegalArgumentException("param's id attribute required"); } try { IMongoEntity query = entity.getClass().newInstance(); query.setId(entity.getId()); entity.setId(null); update(query, entity); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } /** * * @Title: update * @Description: 条件批量更新 * @param entity * @param query */ public static void update(IMongoEntity query, IMongoEntity entity) { DBObject obj = new BasicDBObject(); obj.put("$set", entity.toDBObject()); MongoUtil.getInstance().getCollection(entity.getCollectionName()).updateMulti(query.toDBObject(), obj); } }