MongoDBDao 工具类(包含分页取数据)
- mongdb工具类
- package e16wifi.statistic.com.mongodb;
- import java.util.ArrayList;
- import java.util.List;
- import org.bson.Document;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.DBCursor;
- import com.mongodb.MongoClient;
- import com.mongodb.MongoClientOptions;
- import com.mongodb.MongoCredential;
- import com.mongodb.ServerAddress;
- import com.mongodb.client.FindIterable;
- import com.mongodb.client.MongoCollection;
- import com.mongodb.client.MongoCursor;
- import com.mongodb.client.MongoDatabase;
- import e16wifi.statistic.com.utils.DESUtil;
- import e16wifi.statistic.com.utils.MongoDBProperty;
- import e16wifi.statistic.com.utils.SysPropertyJdbc;
- public class MongoDBDao {
- //数据库
- private MongoDatabase database = null;
- private DB get_db_credit = null;
- private MongoCollection<Document> collection = null;
- private DBCollection dbcollection = null;
- private DBCursor dbCursor = null;
- private MongoCursor<Document> cursor = null;
- private FindIterable<Document> findIterable = null;
- //客户端实例
- private MongoClient mongoClient = null;
- /**
- * 构造函数
- * @throws Exception
- */
- public MongoDBDao() throws Exception{
- this.mongoClient =getMongoClient();
- }
- public void getMongoDatabase(String dataBsae) throws Exception{
- database = this.mongoClient.getDatabase(dataBsae);
- }
- public void getDB(String dataBsae){
- get_db_credit = this.mongoClient.getDB(dataBsae);
- }
- public DBCollection getDBCollection(String dataBsae,String tableName){
- getDB(dataBsae);
- this.dbcollection = get_db_credit.getCollection(tableName);
- return this.dbcollection ;
- }
- public MongoCollection getMongoCollection(String dataBsae,String tableName) throws Exception{
- getMongoDatabase(dataBsae);
- this.collection = database.getCollection(tableName);
- return this.collection;
- }
- public MongoCursor<Document> getMongoCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity,BasicDBObject sort) throws Exception{
- getMongoCollection(dataBsae, tableName);
- if(sort !=null){
- this.cursor = this.collection.find(searchQueryCity).sort(sort).iterator();
- }else{
- this.cursor = this.collection.find(searchQueryCity).iterator();
- }
- return cursor;
- }
- public DBCursor getDBCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity){
- getDBCollection(dataBsae,tableName);
- dbCursor = this.dbcollection.find(searchQueryCity);
- return dbCursor;
- }
- public FindIterable<Document> getFindIterable(String dataBsae,String tableName,BasicDBObject searchQueryCity,int page,int size, BasicDBObject sort) throws Exception{
- getMongoCollection(dataBsae, tableName);
- return findIterable = collection.find(searchQueryCity).skip(page).sort(sort)
- .limit(size);
- }
- public void closeDBCursor(){
- dbCursor.close();
- mongoClient.close();
- }
- public void closeMongoCursor(){
- cursor.close();
- mongoClient.close();
- }
- public void closeMongoClient(){
- mongoClient.close();
- }
- /**
- * 获取MONGODB客户端实例
- *
- * @return
- * @throws Exception
- */
- private MongoClient getMongoClient() throws Exception {
- try {
- // 解密用密钥
- String sKey = SysPropertyJdbc.getProperty("jdbc.deskey")
- .substring(4, 28);
- String sIp = DESUtil.decryptMode(sKey,
- MongoDBProperty.getProperty("mip"));
- int iPort = Integer.valueOf(DESUtil.decryptMode(sKey,
- MongoDBProperty.getProperty("mport")));
- String sUser = DESUtil.decryptMode(sKey,
- MongoDBProperty.getProperty("muser"));
- String sPasword = DESUtil.decryptMode(sKey,
- MongoDBProperty.getProperty("mpassword"));
- String sDbNm = DESUtil.decryptMode(sKey,
- MongoDBProperty.getProperty("mdb"));
- // ===================================================//
- List<ServerAddress> serverList = new ArrayList<ServerAddress>();
- serverList.add(new ServerAddress(sIp, iPort));
- // ===================================================//
- List<MongoCredential> mcList = new ArrayList<MongoCredential>();
- mcList.add(MongoCredential.createCredential(sUser, sDbNm,
- sPasword.toCharArray()));
- // ===================================================//
- MongoClientOptions.Builder builder = MongoClientOptions.builder();
- // 与目标数据库能够建立的最大connection数量为50
- builder.connectionsPerHost(50);
- // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
- builder.threadsAllowedToBlockForConnectionMultiplier(50);
- // 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
- // 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
- // 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
- builder.maxWaitTime(1000 * 60 * 2);
- // 与数据库建立连接的timeout设置为1分钟
- builder.connectTimeout(1000 * 60 * 1);
- // ===================================================//
- MongoClientOptions mco = builder.build();
- return new MongoClient(serverList, mcList, mco);
- } catch (Exception e) {
- throw e;
- }
- }
- }
mongdb取数据,(包含分页)
- PageView pageView = new PageView();
- CommonUtil commonUtil = new CommonUtil();
- String cityCode = this.getPara("selCity");// 当前城市
- if (StringUtils.isNullOrEmpty(cityCode)) {
- cityCode = iSelCity + "";
- }
- // 分页信息开始
- String page = StringUtils.isNullOrEmpty(this.getPara("sPage"))
- ? "1"
- : this.getPara("sPage");
- Integer curPage = Integer.parseInt(page);
- pageView.setCurrentPage(curPage);
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- logger.debug("START...");
- Date date = new Date();// 取时间
- Calendar calendar = new GregorianCalendar();
- calendar.setTime(date);
- calendar.add(calendar.DATE, -1);// 把日期往后增加一天.整数往后推,负数往前移动
- date = calendar.getTime();
- // App用户基本信息
- // mongoDB获取连接
- MongoDBDao mongoClient = new MongoDBDao();
- // 获取数据库
- String mdb = DESUtil.decryptMode(
- SysPropertyJdbc.getProperty("jdbc.deskey").substring(4, 28),
- MongoDBProperty.getProperty("mdb"));
- BasicDBObject condition = new BasicDBObject();
- condition.put("statDate", new BasicDBObject("$gte",matter2.parse(datestart)).append("$lte", matter2.parse(dateend))); //日期查询条件 查询时间范围 gt大于, lt小于 gte、ge大于等于 lte、le 小于等于
- if (!"999".equals(cityCode)) {
- condition.put("cityCode", cityCode);
- }
- BasicDBObject sort = new BasicDBObject();
- // 1,表示正序; -1,表示倒序
- sort.put("cityCode", 1);// 按照活跃度排名
- MongoCursor<Document> cursor1 = mongoClient.getMongoCursor(mdb, "app_user_stat", condition,sort);
- Integer i = 0;
- try{
- while (cursor1.hasNext()) {
- cursor1.next();
- i++;
- }
- } finally {
- cursor1.close();
- }
- pageView.setTotal(i);
- MongoCursor<Document> cursor = mongoClient.getFindIterable(mdb, "app_user_stat", condition, (curPage - 1) * pageView.getPageSize(), pageView.getPageSize(), sort).iterator();
- List<Record> appDetail = new ArrayList<Record>();
- try{
- while (cursor.hasNext()) {
- Iterator<Entry<String, Object>> iter = cursor.next().entrySet()
- .iterator();
- Record record = new Record();
- while (iter.hasNext()) {
- Entry eTmp = (Entry) iter.next();
- Map colums = record.getColumns();
- String sKeyTmp = eTmp.getKey().toString();
- String sKeyValue = "";
- if (eTmp.getValue() == null) {
- sKeyValue = "0";
- } else {
- sKeyValue = eTmp.getValue().toString();
- }
- switch (sKeyTmp) {
- case "statDate" :
- if ("0".equals(sKeyValue)) {
- colums.put("DATE", dateFormat.format(new Date()));
- } else {
- System.out.println("test" + sKeyValue);
- colums.put("DATE",
- dateFormat.format(eTmp.getValue()));
- }
- break;
- case "cityName" :
- // String cityName = TCity.dao
- // .getCityInfoByCityCd(sKeyValue).get(0)
- // .getStr("city_name");
- colums.put("CITY", sKeyValue);
- break;
- case "userSum" :
- colums.put("TOTALUSER", sKeyValue);
- break;
- case "newUserSum" :
- colums.put("NEWADD", sKeyValue);
- break;
- case "activeUserDay" :
- colums.put("ACTIVEDAY", sKeyValue);
- break;
- case "activeUserWeek" :
- colums.put("ACTIVEWEEK", sKeyValue);
- break;
- case "activeUserMonth" :
- colums.put("ACTIVEMONTH", sKeyValue);
- break;
- case "openTimes" :
- colums.put("APPOPEN", sKeyValue);
- break;
- case "avgTimeDay" :
- colums.put("AVGDAY", sKeyValue);
- break;
- case "avgTimeWeek" :
- colums.put("AVGWEEK", sKeyValue);
- break;
- }
- }
- appDetail.add(record);
- }
- } finally {
- cursor.close();
- mongoClient.closeMongoClient();
- }
MongoDBDao 工具类(包含分页取数据)的更多相关文章
- 借助Spring工具类如何实现支持数据嵌套的赋值操作
假设有两个Bean A和B,想将B中的属性赋值到A实体中,可以使用get set来实现,当属性过多时,就会显得很冗余,可以使用spring提供的BeanUtils.copyProperties()来实 ...
- Java并发工具类之线程间数据交换工具Exchanger
Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换.它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据.两个线程通过exchange方法交换数据,如果一个线程执行exch ...
- 利用BeanUtils工具类封装表单数据
一.BeanUtils工具类的使用 1.首先导入BeanUtils工具类的jar包 commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar 2.se ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- 利用JDBC工具类添加和查询数据-Java(新手)
JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...
- Javascript加载talbe(包含分页、数据下载功能)
效果图如下: 首先简单说明一下,后面会给所涉及到的代码都贴上来的. 1.excel图标是一个用户控件,用来触发下载 2.首页.上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或 ...
- SQL 2012 分页取数据
,), data int ) select * from t1 row rows only create clustered index t1c on t1(id) declare @i int ) ...
- php 循环从数据库分页取数据批量修改数据
//批量修改email重复 public function getEmail() { $this->model = app::get('shop')->model('manage'); / ...
- 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 ...
随机推荐
- Entity Framework 教程——安装Entity Framework环境
安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...
- 异步编程系列第01章 Async异步编程简介
p { display: block; margin: 3px 0 0 0; } --> 2016.10.11补充 三个月过去了,回头来看,我不得不承认这是一系列失败的翻译.过段时间,我将重新翻 ...
- MVC发布到虚拟主机上出现的错误
问题1:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 现象:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 原因:站点中部署的Web使用的 ...
- MyEclipse相关部署问题
部署Tomcat如果用MyEclipse自动部署方式很有可能出现一个问题: 服务器关联的这个项目却关联到其他的项目上,导致运行时还在运行以前的项目 解决方法: 将状态提示栏的service里的tomc ...
- 10分钟写一个markdown编辑器
marked.js Marked是一个Markdown解析引擎. vue.js Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vu ...
- Android 手机卫士--导航界面2
本文地址:http://www.cnblogs.com/wuyudong/p/5947504.html,转载请注明出处. 在之前的文章中,实现了导航界面1布局编写与相关的逻辑代码,如下图所示: 点击“ ...
- CentOS6.x生产环境下一键安装mono+jexus的脚本,自启动,带服务,版本号自控
转自: http://linuxdot.net/bbsfile-3784 1.支持哪些个平台?答:暂时仅支持CentOS6.x平台,7.x未测试,欢迎测试并到群里反馈给我(昵称:无聊人士) 2.一键安 ...
- Oracle计算两个时间戳相差秒数,精确到毫秒
with t as (select to_timestamp('2015-01-01 11:13:15.023456', 'yyyy-mm-dd hh24:mi:ss.ff9') t1, to_tim ...
- SSH批量部署服务
SSH批量部署服务 1.1在NFS上作为中心分发服务器将私钥分发到其他服务器上 1.1.1NFS部署 [root@nfs-server ~]# useradd zhurui [root@nfs-ser ...
- 6-3 bash脚本编程之五 字符串测试及for循环
1. 字符测试 ==:等号两边要有空格,否则会被认为是赋值. !=: 测试是否相等,记住如果不等为真,等为假. -n string: 测试指定字符串是否为空,空位真,不空为假. -s string: ...