1. mongdb工具类
  1. package e16wifi.statistic.com.mongodb;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.bson.Document;
  7.  
  8. import com.mongodb.BasicDBObject;
  9. import com.mongodb.DB;
  10. import com.mongodb.DBCollection;
  11. import com.mongodb.DBCursor;
  12. import com.mongodb.MongoClient;
  13. import com.mongodb.MongoClientOptions;
  14. import com.mongodb.MongoCredential;
  15. import com.mongodb.ServerAddress;
  16. import com.mongodb.client.FindIterable;
  17. import com.mongodb.client.MongoCollection;
  18. import com.mongodb.client.MongoCursor;
  19. import com.mongodb.client.MongoDatabase;
  20.  
  21. import e16wifi.statistic.com.utils.DESUtil;
  22. import e16wifi.statistic.com.utils.MongoDBProperty;
  23. import e16wifi.statistic.com.utils.SysPropertyJdbc;
  24.  
  25. public class MongoDBDao {
  26. //数据库
  27. private MongoDatabase database = null;
  28. private DB get_db_credit = null;
  29. private MongoCollection<Document> collection = null;
  30. private DBCollection dbcollection = null;
  31. private DBCursor dbCursor = null;
  32. private MongoCursor<Document> cursor = null;
  33. private FindIterable<Document> findIterable = null;
  34. //客户端实例
  35. private MongoClient mongoClient = null;
  36.  
  37. /**
  38. * 构造函数
  39. * @throws Exception
  40. */
  41. public MongoDBDao() throws Exception{
  42. this.mongoClient =getMongoClient();
  43. }
  44.  
  45. public void getMongoDatabase(String dataBsae) throws Exception{
  46. database = this.mongoClient.getDatabase(dataBsae);
  47. }
  48.  
  49. public void getDB(String dataBsae){
  50. get_db_credit = this.mongoClient.getDB(dataBsae);
  51. }
  52.  
  53. public DBCollection getDBCollection(String dataBsae,String tableName){
  54. getDB(dataBsae);
  55. this.dbcollection = get_db_credit.getCollection(tableName);
  56. return this.dbcollection ;
  57. }
  58.  
  59. public MongoCollection getMongoCollection(String dataBsae,String tableName) throws Exception{
  60. getMongoDatabase(dataBsae);
  61. this.collection = database.getCollection(tableName);
  62. return this.collection;
  63. }
  64.  
  65. public MongoCursor<Document> getMongoCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity,BasicDBObject sort) throws Exception{
  66. getMongoCollection(dataBsae, tableName);
  67. if(sort !=null){
  68. this.cursor = this.collection.find(searchQueryCity).sort(sort).iterator();
  69. }else{
  70. this.cursor = this.collection.find(searchQueryCity).iterator();
  71. }
  72.  
  73. return cursor;
  74. }
  75.  
  76. public DBCursor getDBCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity){
  77. getDBCollection(dataBsae,tableName);
  78. dbCursor = this.dbcollection.find(searchQueryCity);
  79. return dbCursor;
  80. }
  81.  
  82. public FindIterable<Document> getFindIterable(String dataBsae,String tableName,BasicDBObject searchQueryCity,int page,int size, BasicDBObject sort) throws Exception{
  83. getMongoCollection(dataBsae, tableName);
  84. return findIterable = collection.find(searchQueryCity).skip(page).sort(sort)
  85. .limit(size);
  86. }
  87.  
  88. public void closeDBCursor(){
  89. dbCursor.close();
  90. mongoClient.close();
  91. }
  92.  
  93. public void closeMongoCursor(){
  94. cursor.close();
  95. mongoClient.close();
  96. }
  97.  
  98. public void closeMongoClient(){
  99. mongoClient.close();
  100. }
  101. /**
  102. * 获取MONGODB客户端实例
  103. *
  104. * @return
  105. * @throws Exception
  106. */
  107. private MongoClient getMongoClient() throws Exception {
  108. try {
  109. // 解密用密钥
  110. String sKey = SysPropertyJdbc.getProperty("jdbc.deskey")
  111. .substring(4, 28);
  112.  
  113. String sIp = DESUtil.decryptMode(sKey,
  114. MongoDBProperty.getProperty("mip"));
  115. int iPort = Integer.valueOf(DESUtil.decryptMode(sKey,
  116. MongoDBProperty.getProperty("mport")));
  117. String sUser = DESUtil.decryptMode(sKey,
  118. MongoDBProperty.getProperty("muser"));
  119. String sPasword = DESUtil.decryptMode(sKey,
  120. MongoDBProperty.getProperty("mpassword"));
  121. String sDbNm = DESUtil.decryptMode(sKey,
  122. MongoDBProperty.getProperty("mdb"));
  123.  
  124. // ===================================================//
  125. List<ServerAddress> serverList = new ArrayList<ServerAddress>();
  126. serverList.add(new ServerAddress(sIp, iPort));
  127. // ===================================================//
  128. List<MongoCredential> mcList = new ArrayList<MongoCredential>();
  129. mcList.add(MongoCredential.createCredential(sUser, sDbNm,
  130. sPasword.toCharArray()));
  131. // ===================================================//
  132. MongoClientOptions.Builder builder = MongoClientOptions.builder();
  133. // 与目标数据库能够建立的最大connection数量为50
  134. builder.connectionsPerHost(50);
  135. // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
  136. builder.threadsAllowedToBlockForConnectionMultiplier(50);
  137. // 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
  138. // 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
  139. // 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
  140. builder.maxWaitTime(1000 * 60 * 2);
  141. // 与数据库建立连接的timeout设置为1分钟
  142. builder.connectTimeout(1000 * 60 * 1);
  143. // ===================================================//
  144. MongoClientOptions mco = builder.build();
  145. return new MongoClient(serverList, mcList, mco);
  146. } catch (Exception e) {
  147. throw e;
  148. }
  149. }
  150.  
  151. }
  1.  

mongdb取数据,(包含分页)

  1.  
  1. PageView pageView = new PageView();
  2. CommonUtil commonUtil = new CommonUtil();
  3. String cityCode = this.getPara("selCity");// 当前城市
  4. if (StringUtils.isNullOrEmpty(cityCode)) {
  5. cityCode = iSelCity + "";
  6. }
  7. // 分页信息开始
  8. String page = StringUtils.isNullOrEmpty(this.getPara("sPage"))
  9. ? "1"
  10. : this.getPara("sPage");
  11. Integer curPage = Integer.parseInt(page);
  12. pageView.setCurrentPage(curPage);
  13. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  14. logger.debug("START...");
  15. Date date = new Date();// 取时间
  16. Calendar calendar = new GregorianCalendar();
  17. calendar.setTime(date);
  18. calendar.add(calendar.DATE, -1);// 把日期往后增加一天.整数往后推,负数往前移动
  19. date = calendar.getTime();
  20. // App用户基本信息
  21. // mongoDB获取连接
  22. MongoDBDao mongoClient = new MongoDBDao();
  23. // 获取数据库
  24. String mdb = DESUtil.decryptMode(
  25. SysPropertyJdbc.getProperty("jdbc.deskey").substring(4, 28),
  26. MongoDBProperty.getProperty("mdb"));
  27.  
  28. BasicDBObject condition = new BasicDBObject();
  29. condition.put("statDate", new BasicDBObject("$gte",matter2.parse(datestart)).append("$lte", matter2.parse(dateend))); //日期查询条件 查询时间范围 gt大于, lt小于 gte、ge大于等于   lte、le 小于等于
  30. if (!"999".equals(cityCode)) {
  31. condition.put("cityCode", cityCode);
  32. }
  33. BasicDBObject sort = new BasicDBObject();
  34. // 1,表示正序; -1,表示倒序
  35. sort.put("cityCode", 1);// 按照活跃度排名
  36. MongoCursor<Document> cursor1 = mongoClient.getMongoCursor(mdb, "app_user_stat", condition,sort);
  37. Integer i = 0;
  38. try{
  39. while (cursor1.hasNext()) {
  40. cursor1.next();
  41. i++;
  42. }
  43. } finally {
  44. cursor1.close();
  45. }
  46. pageView.setTotal(i);
  47. MongoCursor<Document> cursor = mongoClient.getFindIterable(mdb, "app_user_stat", condition, (curPage - 1) * pageView.getPageSize(), pageView.getPageSize(), sort).iterator();
  48. List<Record> appDetail = new ArrayList<Record>();
  49. try{
  50. while (cursor.hasNext()) {
  51. Iterator<Entry<String, Object>> iter = cursor.next().entrySet()
  52. .iterator();
  53. Record record = new Record();
  54. while (iter.hasNext()) {
  55. Entry eTmp = (Entry) iter.next();
  56. Map colums = record.getColumns();
  57. String sKeyTmp = eTmp.getKey().toString();
  58. String sKeyValue = "";
  59. if (eTmp.getValue() == null) {
  60. sKeyValue = "0";
  61. } else {
  62. sKeyValue = eTmp.getValue().toString();
  63. }
  64. switch (sKeyTmp) {
  65. case "statDate" :
  66. if ("0".equals(sKeyValue)) {
  67. colums.put("DATE", dateFormat.format(new Date()));
  68. } else {
  69. System.out.println("test" + sKeyValue);
  70. colums.put("DATE",
  71. dateFormat.format(eTmp.getValue()));
  72. }
  73. break;
  74. case "cityName" :
  75. // String cityName = TCity.dao
  76. // .getCityInfoByCityCd(sKeyValue).get(0)
  77. // .getStr("city_name");
  78. colums.put("CITY", sKeyValue);
  79. break;
  80. case "userSum" :
  81. colums.put("TOTALUSER", sKeyValue);
  82. break;
  83. case "newUserSum" :
  84. colums.put("NEWADD", sKeyValue);
  85. break;
  86. case "activeUserDay" :
  87. colums.put("ACTIVEDAY", sKeyValue);
  88. break;
  89. case "activeUserWeek" :
  90. colums.put("ACTIVEWEEK", sKeyValue);
  91. break;
  92. case "activeUserMonth" :
  93. colums.put("ACTIVEMONTH", sKeyValue);
  94. break;
  95. case "openTimes" :
  96. colums.put("APPOPEN", sKeyValue);
  97. break;
  98. case "avgTimeDay" :
  99. colums.put("AVGDAY", sKeyValue);
  100. break;
  101. case "avgTimeWeek" :
  102. colums.put("AVGWEEK", sKeyValue);
  103. break;
  104. }
  105. }
  106. appDetail.add(record);
  107. }
  108. } finally {
  109. cursor.close();
  110. mongoClient.closeMongoClient();
  111. }
  1.  
  1.  

MongoDBDao 工具类(包含分页取数据)的更多相关文章

  1. 借助Spring工具类如何实现支持数据嵌套的赋值操作

    假设有两个Bean A和B,想将B中的属性赋值到A实体中,可以使用get set来实现,当属性过多时,就会显得很冗余,可以使用spring提供的BeanUtils.copyProperties()来实 ...

  2. Java并发工具类之线程间数据交换工具Exchanger

    Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换.它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据.两个线程通过exchange方法交换数据,如果一个线程执行exch ...

  3. 利用BeanUtils工具类封装表单数据

    一.BeanUtils工具类的使用 1.首先导入BeanUtils工具类的jar包 commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar 2.se ...

  4. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  5. 利用JDBC工具类添加和查询数据-Java(新手)

    JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...

  6. Javascript加载talbe(包含分页、数据下载功能)

    效果图如下: 首先简单说明一下,后面会给所涉及到的代码都贴上来的. 1.excel图标是一个用户控件,用来触发下载 2.首页.上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或 ...

  7. SQL 2012 分页取数据

    ,), data int ) select * from t1 row rows only create clustered index t1c on t1(id) declare @i int ) ...

  8. php 循环从数据库分页取数据批量修改数据

    //批量修改email重复 public function getEmail() { $this->model = app::get('shop')->model('manage'); / ...

  9. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

随机推荐

  1. Entity Framework 教程——安装Entity Framework环境

    安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...

  2. 异步编程系列第01章 Async异步编程简介

    p { display: block; margin: 3px 0 0 0; } --> 2016.10.11补充 三个月过去了,回头来看,我不得不承认这是一系列失败的翻译.过段时间,我将重新翻 ...

  3. MVC发布到虚拟主机上出现的错误

    问题1:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 现象:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 原因:站点中部署的Web使用的 ...

  4. MyEclipse相关部署问题

    部署Tomcat如果用MyEclipse自动部署方式很有可能出现一个问题: 服务器关联的这个项目却关联到其他的项目上,导致运行时还在运行以前的项目 解决方法: 将状态提示栏的service里的tomc ...

  5. 10分钟写一个markdown编辑器

    marked.js Marked是一个Markdown解析引擎. vue.js Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vu ...

  6. Android 手机卫士--导航界面2

    本文地址:http://www.cnblogs.com/wuyudong/p/5947504.html,转载请注明出处. 在之前的文章中,实现了导航界面1布局编写与相关的逻辑代码,如下图所示: 点击“ ...

  7. CentOS6.x生产环境下一键安装mono+jexus的脚本,自启动,带服务,版本号自控

    转自: http://linuxdot.net/bbsfile-3784 1.支持哪些个平台?答:暂时仅支持CentOS6.x平台,7.x未测试,欢迎测试并到群里反馈给我(昵称:无聊人士) 2.一键安 ...

  8. Oracle计算两个时间戳相差秒数,精确到毫秒

    with t as (select to_timestamp('2015-01-01 11:13:15.023456', 'yyyy-mm-dd hh24:mi:ss.ff9') t1, to_tim ...

  9. SSH批量部署服务

    SSH批量部署服务 1.1在NFS上作为中心分发服务器将私钥分发到其他服务器上 1.1.1NFS部署 [root@nfs-server ~]# useradd zhurui [root@nfs-ser ...

  10. 6-3 bash脚本编程之五 字符串测试及for循环

    1. 字符测试 ==:等号两边要有空格,否则会被认为是赋值. !=:  测试是否相等,记住如果不等为真,等为假. -n string: 测试指定字符串是否为空,空位真,不空为假. -s string: ...