mongodb的簡單使用二(結合springdata實現增刪改查)
阿新 • • 發佈:2018-12-24
package com.glgd.recarticle.dao; import java.util.ArrayList; import java.util.List; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Order; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import com.glgd.recarticle.bean.ArticleComments; import com.glgd.recarticle.bean.ArticleSearchBean; import com.glgd.recarticle.domain.Article; import com.mongodb.MongoBaseDao; import com.util.StringUtil; @Repository(value="com.glgd.recarticle.dao.ArticleDao") public class ArticleDao extends MongoBaseDao<Article> { /** * 根據查詢條件分頁查詢文章 * @param searchBean 查詢 * @param skip 每頁開始的位置 (skip:每一頁開始位置;第一頁第一條skip=0) * @param limit 每頁的大小 * @return */ public List<Article> findListBySearchBean(ArticleSearchBean searchBean,int skip,int limit){ List<Article> list = null; Query query = new Query(); Criteria criteria = new Criteria(); //查詢條件 List<Criteria> list1 = new ArrayList<Criteria>(); //contentType條件 加入OR List<Integer> clist = searchBean.getContentTypeList(); if(null != clist){ Criteria[] orArray = new Criteria[clist.size()]; for(int i = 0; i < clist.size(); i++){ orArray[i] = Criteria.where("contentType").is(clist.get(i)); } list1.add(new Criteria().orOperator(orArray)); } if(!StringUtil.isEmpty(searchBean.getArticleTitle())){ list1.add(Criteria.where("articleTitle").regex(searchBean.getArticleTitle().trim())); } if(searchBean.getArticleStatus() != null){ list1.add(Criteria.where("articleStatus").is(searchBean.getArticleStatus())); } if(!StringUtil.isEmpty(searchBean.getEditor())){ list1.add(criteria = Criteria.where("editor").regex(searchBean.getEditor().trim())); } if(!StringUtil.isEmpty(searchBean.getArticleType())){ list1.add( Criteria.where("articleType").is(searchBean.getArticleType())); } //只選擇開始時間 if(searchBean.getStartTime()!= null){ list1.add(Criteria.where("publishDate").gte(searchBean.getStartTime().getTime())); } //只選擇結束時間 if(searchBean.getEndTime()!= null ){ list1.add(Criteria.where("publishDate").lt(searchBean.getEndTime().getTime())); } //轉換條件查詢 if(list1.size()>0){ Criteria[] criteriaCondition = list1.toArray(new Criteria[list1.size()]); criteria.andOperator(criteriaCondition); query.addCriteria(criteria); } query.skip(skip); query.limit(limit); query.sort().on("publishDate", Order.DESCENDING); list = this.findByQuery(query, Article.class); return list; } public long getCount(ArticleSearchBean searchBean){ long count = 0; Query query = new Query(); Criteria criteria = new Criteria(); //查詢條件 List<Criteria> list = new ArrayList<Criteria>(); //contentType條件 加入OR List<Integer> clist = searchBean.getContentTypeList(); if(null != clist){ Criteria[] orArray = new Criteria[clist.size()]; for(int i = 0; i < clist.size(); i++){ orArray[i] = Criteria.where("contentType").is(clist.get(i)); } list.add(new Criteria().orOperator(orArray)); } if(!StringUtil.isEmpty(searchBean.getArticleTitle())){ list.add(Criteria.where("articleTitle").regex(searchBean.getArticleTitle().trim())); } if(searchBean.getArticleStatus() != null){ list.add(Criteria.where("articleStatus").is(searchBean.getArticleStatus())); } if(!StringUtil.isEmpty(searchBean.getEditor())){ list.add(Criteria.where("editor").regex(searchBean.getEditor().trim())); } if(!StringUtil.isEmpty(searchBean.getArticleType())){ list.add( Criteria.where("articleType").is(searchBean.getArticleType())); } //只選擇開始時間 if(searchBean.getStartTime()!= null){ list.add(Criteria.where("publishDate").gte(searchBean.getStartTime().getTime())); } //只選擇結束時間 if(searchBean.getEndTime()!= null ){ list.add(Criteria.where("publishDate").lt(searchBean.getEndTime().getTime())); } //轉換條件查詢 if(list.size()>0){ Criteria[] criteriaCondition = list.toArray(new Criteria[list.size()]); criteria.andOperator(criteriaCondition); query.addCriteria(criteria); } count = this.getCount(query, Article.class); return count; } /** * 新增評論 * @param _id * @param comments */ public void addComments(String _id,ArticleComments comments){ Query query = Query.query(Criteria.where("_id").is(_id)); Update update = new Update(); update.addToSet("comments", comments); this.updateFirst(query, update, Article.class); } /** * 根據條件獲取文章下的評論 * @param searchBean * @param skip * @param pageSize * @return */ public List<Article> getAllComments(ArticleSearchBean searchBean){ Query query = new Query(); query.fields().include("comments"); Criteria criteria = new Criteria(); //查詢條件 List<Criteria> listCriteria = new ArrayList<Criteria>(); if(!StringUtil.isEmpty(searchBean.getUseName())){ listCriteria.add(Criteria.where("comments.userName").regex(searchBean.getUseName().trim())); } if(!StringUtil.isEmpty(searchBean.getKeyWord())){ listCriteria.add(Criteria.where("comments.content").regex(searchBean.getKeyWord().trim())); } if(searchBean.getCommentDate()!= null){ listCriteria.add(Criteria.where("comments.commentTime").lt(searchBean.getCommentDate().getTime()+(3600*1000*24L))); listCriteria.add(Criteria.where("comments.commentTime").gte(searchBean.getCommentDate().getTime())); } //轉換條件查詢 if(listCriteria.size()>0){ Criteria[] criteriaCondition = listCriteria.toArray(new Criteria[listCriteria.size()]); criteria.andOperator(criteriaCondition); query.addCriteria(criteria); } List<Article> articleList = this.findByQuery(query, Article.class); return articleList; } /** * 刪除評論的內嵌文件 * @param userId * @param commentTime * @param _id */ public void deleteComment(long userId,long commentTime,String _id){ Query query = Query.query(Criteria.where("comments.userId").is(userId).and("comments.commentTime").is(commentTime).and("_id").is(_id)); Update update = new Update(); update.unset("comments.$"); this.updateFirst(query, update, Article.class); this.deleteNULLcomment(_id); } /** * 清空評論中的null並且評論數-1 * @param _id */ public void deleteNULLcomment(String _id){ Query query = Query.query(Criteria.where("_id").is(_id)); Update update = new Update(); update.pull("comments", null); update.inc("commentCount", -1); this.updateFirst(query, update, Article.class); } /** * 更新文章資訊 * @param article */ public void updateArticle(Article article){ Query query = Query.query(Criteria.where("_id").is(article.get_id())); Update update = new Update(); update.set("articleTitle", article.getArticleTitle()); update.set("articleType", article.getArticleType()); update.set("editor", article.getEditor()); update.set("articleStatus", article.getArticleStatus()); update.set("publishDate", article.getPublishDate()); update.set("sortFlag", article.getSortFlag()); update.set("rcoverImage", article.getRcoverImage()); update.set("overview", article.getOverview()); update.set("articleDetail", article.getArticleDetail()); update.set("contentType", article.getContentType()); update.set("sconverImage", article.getSconverImage()); this.updateFirst(query, update, Article.class); } /** * 根據文章主鍵刪除文章 * @param _id */ public void deleteArticleById(String _id){ Query query = Query.query(Criteria.where("_id").is(_id)); this.delete(query, Article.class); } /** * 刪除評論時,更新評論數 * @param _id * @param comments */ public void updateCommentCount(String _id,int size){ Query query = Query.query(Criteria.where("_id").is(_id)); Update update = new Update(); update.inc("commentCount", -size); this.updateFirst(query, update, Article.class); } /** * 新增和刪除收藏時更新收藏次數 * @param _id * @param size */ public void updateCollectCount(String _id,int size){ Query query = Query.query(Criteria.where("_id").is(_id)); Update update = new Update(); update.inc("collectCount", size); this.updateFirst(query, update, Article.class); } /** * 更新瀏覽次數 * @param _id * @param size */ public void updateBrowseCount(String _id,int size){ Query query = Query.query(Criteria.where("_id").is(_id)); Update update = new Update(); update.inc("scanCount", size); this.updateFirst(query, update, Article.class); } }