|
@@ -0,0 +1,143 @@
|
|
|
+package com.yonge.mongodb.dao;
|
|
|
+
|
|
|
+import java.io.Serializable;
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Map.Entry;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+
|
|
|
+import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
+import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
+import org.springframework.data.mongodb.core.query.Query;
|
|
|
+import org.springframework.data.mongodb.core.query.Update;
|
|
|
+
|
|
|
+import com.yonge.mongodb.PageInfo;
|
|
|
+
|
|
|
+public abstract class BaseDaoWithMongo<PK, T extends Serializable> {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MongoTemplate mongoTemplate;
|
|
|
+
|
|
|
+ public abstract Class<T> getClassEntity();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过主键id获取对象
|
|
|
+ * @param id
|
|
|
+ * @return T
|
|
|
+ */
|
|
|
+ public T get(PK id) {
|
|
|
+ Query query = new Query(Criteria.where("_id").is(id));
|
|
|
+ return mongoTemplate.findOne(query, getClassEntity());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新实体对象
|
|
|
+ * @param bean
|
|
|
+ */
|
|
|
+ public long update(PK id, T bean) {
|
|
|
+ Query query = new Query(Criteria.where("_id").is(id));
|
|
|
+
|
|
|
+ Update update = new Update();
|
|
|
+
|
|
|
+ Field[] fieldList = bean.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fieldList) {
|
|
|
+ field.setAccessible(true);
|
|
|
+ try {
|
|
|
+ update.set(field.getName(), field.get(bean));
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return mongoTemplate.updateFirst(query, update, getClassEntity()).getModifiedCount();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过主键id删除对象
|
|
|
+ * @param id
|
|
|
+ */
|
|
|
+ public long delete(final PK id) {
|
|
|
+ Query query = new Query(Criteria.where("_id").is(id));
|
|
|
+ return mongoTemplate.remove(query, getClassEntity()).getDeletedCount();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 写入实体对象
|
|
|
+ * @param bean
|
|
|
+ */
|
|
|
+ public void insert(T bean) {
|
|
|
+ mongoTemplate.insert(bean);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过参数查找所有结果集
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<T> findAll(Map<String, Object> params) {
|
|
|
+ Query query = new Query();
|
|
|
+
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ if (params != null) {
|
|
|
+ for (Entry<String, Object> entry : params.entrySet()) {
|
|
|
+ criteria.and(entry.getKey()).is(entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ query.addCriteria(criteria);
|
|
|
+ return mongoTemplate.find(query, getClassEntity());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过参数查找结果集,适合分页场景
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public PageInfo<T> queryPage(int page, int size, Map<String, Object> params) {
|
|
|
+ PageInfo<T> pageInfo = new PageInfo<T>(page, size);
|
|
|
+
|
|
|
+ List<T> dataList = null;
|
|
|
+ long total = this.queryCount(params);
|
|
|
+ if (total > 0) {
|
|
|
+ pageInfo.setTotal(total);
|
|
|
+
|
|
|
+ Query query = new Query();
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ if (params != null) {
|
|
|
+ for (Entry<String, Object> entry : params.entrySet()) {
|
|
|
+ criteria.and(entry.getKey()).is(entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ query.addCriteria(criteria);
|
|
|
+ query.skip(pageInfo.getOffset()).limit(pageInfo.getLimit());
|
|
|
+ dataList = mongoTemplate.find(query, getClassEntity());
|
|
|
+ }
|
|
|
+ if (total == 0) {
|
|
|
+ dataList = new ArrayList<T>();
|
|
|
+ }
|
|
|
+ pageInfo.setRows(dataList);
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过参数查找结果集数目
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public long queryCount(Map<String, Object> params) {
|
|
|
+ Query query = new Query();
|
|
|
+
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ if (params != null) {
|
|
|
+ for (Entry<String, Object> entry : params.entrySet()) {
|
|
|
+ criteria.and(entry.getKey()).is(entry.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ query.addCriteria(criteria);
|
|
|
+ return mongoTemplate.count(query, getClassEntity());
|
|
|
+ }
|
|
|
+}
|