这篇文章主要知识点是关于java、mongodb、查询数据、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书
由于需要用MongoDB
缓存数据,所以自己写了一套公共的存放和读取方法
具体如下:
存放mongodb:
/** * 公共方法:设置Object类型缓存 * @author shijing * @param param * @param sysGuid */ public void setObjData(Map<String,Object> param, String sysGuid, String enumBpd){ DBObject dbObject = new BasicDBObject(); dbObject.putAll(param); String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid; mongoDao.insertToCol(dbObject,collectionName); } /** * 公共方法:设置List缓存 * @author shijing * @param paramList * @param sysGuid */ public void setListData(List<Map<String,Object>> paramList, String sysGuid, String enumBpd){ List<DBObject> list = new ArrayList<>(); if(CollectionUtils.isNotNull(paramList)){ for (Map<String,Object> param : paramList){ DBObject dbObject = new BasicDBObject(); dbObject.putAll(param); list.add(dbObject); } } String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid; mongoDao.insertToCol(list,collectionName);
mongoDao里面的方法:
public void insertToCol(DBObject document, String collectionName) { dropCol(collectionName); DBCollection dbCollection = mongoTemplate.createCollection(collectionName); dbCollection.insert(document); } public void insertToCol(List<DBObject> documents, String collectionName) { dropCol(collectionName); DBCollection dbCollection = mongoTemplate.createCollection(collectionName); dbCollection.insert(documents); }
读取方法
/** * 通过关键字模糊查询问题和答案库 * @param param * @return */ @Override public List<Map<String, Object>> searchQuestionAndAnswerByKeyword(Map<String, Object> param) { List<Map<String,Object>> searchList = new ArrayList<>(); Map<String,Object> userInfo = SessionUtils.getUserInfo(); String sysGuid = userInfo.get("sys_guid").toString(); String collectionName = EnumBpd.getBpdType(EnumBpd.HELP_PAGE_LIST.getType())+sysGuid; //注释里面这种方式虽然能模糊查询,但是容易漏掉数据,切记切记!!! //Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$", Pattern.CASE_INSENSITIVE); BasicDBObject query= new BasicDBObject(); //模糊查询的字段设置 query.put("page_html", Pattern.compile((String) param.get("keyword"))); DBCursor dbCursor = mongoDao.findAll(query,collectionName); List<DBObject> list = dbCursor.toArray(); for (DBObject dbObject: list){ searchList.add(dbObject.toMap()); } //模糊查到的数据进行组装 return getQuestionAndAnswerList(searchList); } /** * 公共方法:批量—— in方法查询List数据 * @author shijing * @param ids id集合 * @param paramMap 其他参数 * @param columnName in字段列名 * @param collectionName 表名 * @return */ @Override public List<Map<String, Object>> batchSearchPageListByIds(List<String> ids, Map<String, Object> paramMap, String columnName, String collectionName) { List<Map<String,Object>> searchList = new ArrayList<>(); BasicDBObject query= new BasicDBObject(); //批量查询,in if (CollectionUtils.isNotEmpty(ids)){ BasicDBList values = new BasicDBList(); values.addAll(ids); query.put(columnName, new BasicDBObject("$in",values)); } //拼接参数 if(MapUtils.isNotEmpty(paramMap)){ for (String mapKey: paramMap.keySet()){ query.put(mapKey, paramMap.get(mapKey)); } } DBCursor dbCursor = mongoDao.findAll(query,collectionName); List<DBObject> list = dbCursor.toArray(); if (dbCursor!=null && dbCursor.size()>0){ for (DBObject dbObject: list){ searchList.add(dbObject.toMap()); } } return searchList; } /** * 公共方法:通过参数获取List数据 * @author shijing * @param paramMap 参数 * @param collectionName 表名 * @return */ @Override public List<Map<String, Object>> getListByParam(Map<String, Object> paramMap,String collectionName){ List<Map<String,Object>> searchList = new ArrayList<>(); BasicDBObject query= new BasicDBObject(); //拼接参数 if(MapUtils.isNotEmpty(paramMap)){ for (String mapKey: paramMap.keySet()){ query.put(mapKey, paramMap.get(mapKey)); } } DBCursor dbCursor = mongoDao.findAll(query,collectionName); List<DBObject> list = dbCursor.toArray(); if (dbCursor!=null && dbCursor.size()>0){ for (DBObject dbObject: list){ searchList.add(dbObject.toMap()); } } return searchList; } /** * 公共方法:通过参数获取Object数据 * @author shijing * @param paramMap * @param collectionName 表名 * @return */ @Override public Map<String, Object> getObjectByParam(Map<String, Object> paramMap, String collectionName) { Map<String,Object> webSiteInfo = new HashMap<>(); BasicDBObject query= new BasicDBObject(); //拼接参数 if(MapUtils.isNotEmpty(paramMap)){ for (String mapKey: paramMap.keySet()){ query.put(mapKey, paramMap.get(mapKey)); } } DBObject dbObject = mongoDao.findOne(query,collectionName); if(dbObject!=null){ return dbObject.toMap(); } return webSiteInfo; }
注意事项:
mongodb模糊查询时
Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$"
这种方式存在bug, 容易漏掉数据
应该使用下面这种方式:
query.put("page_html", Pattern.compile((String) param.get("keyword")));
先记录到这吧,有需要在补充,批量in方法也在上述代码里面。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。如果你想了解更多相关内容请查看下面相关链接
以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。
Copyright 2018-2020 www.xz577.com 码农之家
版权投诉 / 书籍推广 / 赞助:520161757@qq.com
java操作solr实现查询功能的实例
一、封装的查询方法 /*** solr查询方法* @param client solr客户端* @param query solr查询对象* @return list集合* @throws SolrServerException * @throws IOException*/public static ListMapString, Object getSolrQuery(HttpSolrClient client, SolrQuery query) throws SolrServerException, IOException{ListMapString, Object list = null;//执行查询并返回结果QueryResponse resp = client.query(query);SolrDocumentList results = resp.getResults();//获取查询到的数据总量long numFound = results.getNumFound();//判断总量是否大于0,if(numFound = 0) {//如果小于0,表示未查询到任何数据,返回nullreturn null;}else {//如果大于0,表示有数据//创建list存储每条数据list = new ArrayList();//遍历结果集for (SolrDocument doc : results) {//得到每条数据的map集合MapString, Object map = doc.getFieldValueMap();//添加到listlist.add(map);}//返回list集合return list;}} 二、主函数 public static void main(String[] args) throws S……
java时间日期使用与查询代码详解
只要格式正确,直接比较字符串就可以了呀,精确到秒的也一样 String s1 = "2003-12-12 11:30:24"; String s2 = "2004-04-01 13:31:40"; int res = s1.compareTo(s2); 求日期差 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date begin=df.parse("2004-01-02 11:30:24"); Date end = df.parse("2004-03-26 13:31:40"); long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒 int day=between/(24*3600); int hour=between%(24*3600)/3600; int minute=between%3600/60; int second=between%60; 经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下,方便大家查找 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 注:在使用set方法之前,最好先clear一下,否则很多信息会继……