mongodb的简单使用二(结合springdata实现增删改查)
来源:互联网 发布:js正则表达式数字 编辑:程序博客网 时间:2024/05/17 13:43
结合springdata实现增删改查
上一篇文章已经介绍了环境搭建和公用dao的实现,现在就来简单的说一下代码结构和简单的增删改查
一、业务dao继承基础的mongodbDao(代码示例)
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条件 加入ORList<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条件 加入ORList<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);}}
二、对于Dao中对数据库集合的操作总结:
1、查询 :查询语句(注意事不能有多个Or和and--->new Criteria().and("").is("").orOperator(criteria).is(""))类似这样的操作查询时是会报错的,所以改为如下方式:
Query query = new Query();Criteria criteria = new Criteria();//查询条件List<Criteria> list1 = new ArrayList<Criteria>();//contentType条件 加入ORList<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(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);
a).模糊匹配:Criteria.where("articleTitle").regex(searchBean.getArticleTitle().trim()) regex方法用来进行模糊匹配,类似于 sql 的like;
b). 内嵌文档查询:结合图片中
根据条件查询type(内嵌文档查询):代码示例如下
if(!StringUtil.isEmpty(paramBean.getPtype())){listCriteria.add(Criteria.where("type.ptype").is(paramBean.getPtype()));}if(!StringUtil.isEmpty(paramBean.getFtype())){listCriteria.add(Criteria.where("type.fctype").is(paramBean.getFtype()));}
c).分页查询:
query.skip(skip); <span></span> query.limit(limit);
d).查询结果排序: org.springframework.data.mongodb.core.query.Order
query.sort().on("publishDate", Order.DESCENDING);
e).对内嵌文档切片查询:由于我在springdata 框架中没有找到对应的api所以自己,写了一个简单的示例,可以结合示例灵活应用。数据结构图
//关于内嵌文档 的 切片查询 public static void main(String[] args) throws UnknownHostException {Mongo mogo = new Mongo("127.0.0.1",27017);DB db = mogo.getDB("authTest");DBCollection successCard = db.getCollection("successCard");successCard.rename("successCard_20160112");BasicDBObject query = new BasicDBObject("_id", new ObjectId("5694b1ef977dfabb53a16d51"));BasicDBObject fields = new BasicDBObject( "commentList", new BasicDBObject("$slice", new int[] { 1, 3 }));DBCursor resultsCursor = successCard.find(query, fields);while(resultsCursor.hasNext()){System.out.println(resultsCursor.next().toMap().get("commentList"));} }
0 0
- mongodb的简单使用二(结合springdata实现增删改查)
- mongodb实现简单的增删改查
- mongodb实现简单的增删改查
- mongodb实现简单的增删改查
- Mongodb-使用javaDriver 实现增删改查
- MongoDB简单的增删改查
- MongoDB之增删改查(二)
- csharp实现MongoDB的增删改查
- MVC学习笔记二:实现简单的增删改查
- mongodb-简单增删改查
- mongodb的简单使用三(结合springdata 使用遇到的坑)
- 使用Hibernate实现简单的数据库增删改查。
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
- 使用springMvc+easyui+mysql实现简单的增删改查
- 使用playframework实现简单的增删改查
- 使用 EasyUI 实现 MySQL 数据 简单的 增删改查
- Hibernate七部曲(二)简单的增删改查
- Springboot基础篇(二) 简单的增删改查
- java中Map数据结构详解
- 泰山医学院与传智播客教育集团签约 达成实践教学基地合作
- 燃烧的平台
- 时间类型转json后格式化显示方法
- 地图
- mongodb的简单使用二(结合springdata实现增删改查)
- iBatis与Hibernate有什么不同
- android学习:在ListView中添加带图片和文字的复杂列表项
- IMX6Solo启动流程-Linux 内核启动 五
- ERP项目实施成败关键点
- IO - 同步,异步,阻塞,非阻塞
- vs2010 对编码界面进行设置
- 转自彪哥:Android 史上最强多语言国际化,不仅第一次会跟随系统,而且会保存用户的语言设置
- 错误:该表单无法显示,可能是由于 Microsoft SharePoint Server State Service 配置不当。有关详细信息,请与服务器管理员联系