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;</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)"> * 构造函数 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> Exception </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">public</span> MongoDBDao() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{ </span><span style="color: rgba(0, 0, 255, 1)">this</span>.mongoClient =<span style="color: rgba(0, 0, 0, 1)">getMongoClient(); } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> getMongoDatabase(String dataBsae) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{ database </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.mongoClient.getDatabase(dataBsae); } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> getDB(String dataBsae){ get_db_credit </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.mongoClient.getDB(dataBsae); } </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> DBCollection getDBCollection(String dataBsae,String tableName){ getDB(dataBsae); </span><span style="color: rgba(0, 0, 255, 1)">this</span>.dbcollection =<span style="color: rgba(0, 0, 0, 1)"> get_db_credit.getCollection(tableName); </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.dbcollection ; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> MongoCollection getMongoCollection(String dataBsae,String tableName) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{ getMongoDatabase(dataBsae); </span><span style="color: rgba(0, 0, 255, 1)">this</span>.collection =<span style="color: rgba(0, 0, 0, 1)"> database.getCollection(tableName); </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> MongoCursor<Document> getMongoCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity,BasicDBObject sort) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{ getMongoCollection(dataBsae, tableName); </span><span style="color: rgba(0, 0, 255, 1)">if</span>(sort !=<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){ </span><span style="color: rgba(0, 0, 255, 1)">this</span>.cursor = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection.find(searchQueryCity).sort(sort).iterator(); }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{ </span><span style="color: rgba(0, 0, 255, 1)">this</span>.cursor = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection.find(searchQueryCity).iterator(); } </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cursor; } </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> DBCursor getDBCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity){ getDBCollection(dataBsae,tableName); dbCursor </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.dbcollection.find(searchQueryCity); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dbCursor; } </span><span style="color: rgba(0, 0, 255, 1)">public</span> FindIterable<Document> getFindIterable(String dataBsae,String tableName,BasicDBObject searchQueryCity,<span style="color: rgba(0, 0, 255, 1)">int</span> page,<span style="color: rgba(0, 0, 255, 1)">int</span> size, BasicDBObject sort) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{ getMongoCollection(dataBsae, tableName); </span><span style="color: rgba(0, 0, 255, 1)">return</span> findIterable =<span style="color: rgba(0, 0, 0, 1)"> collection.find(searchQueryCity).skip(page).sort(sort) .limit(size); } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeDBCursor(){ dbCursor.close(); mongoClient.close(); } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeMongoCursor(){ cursor.close(); mongoClient.close(); } </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeMongoClient(){ mongoClient.close(); } </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)"> * 获取MONGODB客户端实例 * * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> Exception </span><span style="color: rgba(0, 128, 0, 1)">*/</span> <span style="color: rgba(0, 0, 255, 1)">private</span> MongoClient getMongoClient() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 解密用密钥</span> String sKey = SysPropertyJdbc.getProperty("jdbc.deskey"<span style="color: rgba(0, 0, 0, 1)">) .substring(</span>4, 28<span style="color: rgba(0, 0, 0, 1)">); String sIp </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey, MongoDBProperty.getProperty(</span>"mip"<span style="color: rgba(0, 0, 0, 1)">)); </span><span style="color: rgba(0, 0, 255, 1)">int</span> iPort =<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(DESUtil.decryptMode(sKey, MongoDBProperty.getProperty(</span>"mport"<span style="color: rgba(0, 0, 0, 1)">))); String sUser </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey, MongoDBProperty.getProperty(</span>"muser"<span style="color: rgba(0, 0, 0, 1)">)); String sPasword </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey, MongoDBProperty.getProperty(</span>"mpassword"<span style="color: rgba(0, 0, 0, 1)">)); String sDbNm </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey, MongoDBProperty.getProperty(</span>"mdb"<span style="color: rgba(0, 0, 0, 1)">)); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ===================================================</span><span style="color: rgba(0, 128, 0, 1)">//
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 </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BasicDBObject(); <strong><span style="color: rgba(255, 0, 0, 1)"> condition.put("statDate", new BasicDBObject("$gte",matter2.parse(datestart)).append("$lte", matter2.parse(dateend))); </span></strong></span><strong><span style="color: rgba(255, 0, 0, 1)">//日期查询条件 查询时间范围 gt大于, lt小于 gte、ge大于等于 lte、le 小于等于 </span></strong><span style="color: rgba(0, 0, 255, 1)">if</span> (!"999"<span style="color: rgba(0, 0, 0, 1)">.equals(cityCode)) { condition.put(</span>"cityCode"<span style="color: rgba(0, 0, 0, 1)">, cityCode); } BasicDBObject sort </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BasicDBObject(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1,表示正序; -1,表示倒序</span> sort.put("cityCode", 1);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按照活跃度排名</span> MongoCursor<Document> cursor1 = mongoClient.getMongoCursor(mdb, "app_user_stat"<span style="color: rgba(0, 0, 0, 1)">, condition,sort); Integer i </span>= 0<span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{ </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (cursor1.hasNext()) { cursor1.next(); i</span>++<span style="color: rgba(0, 0, 0, 1)">; } } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> { cursor1.close(); } pageView.setTotal(i); MongoCursor</span><Document> cursor = mongoClient.getFindIterable(mdb, "app_user_stat", condition, (curPage - 1) *<span style="color: rgba(0, 0, 0, 1)"> pageView.getPageSize(), pageView.getPageSize(), sort).iterator(); List</span><Record> appDetail = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList<Record><span style="color: rgba(0, 0, 0, 1)">(); </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{ </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (cursor.hasNext()) { Iterator</span><Entry<String, Object>> iter =<span style="color: rgba(0, 0, 0, 1)"> cursor.next().entrySet() .iterator(); Record record </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Record(); </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (iter.hasNext()) { Entry eTmp </span>=<span style="color: rgba(0, 0, 0, 1)"> (Entry) iter.next(); Map colums </span>=<span style="color: rgba(0, 0, 0, 1)"> record.getColumns(); String sKeyTmp </span>=<span style="color: rgba(0, 0, 0, 1)"> eTmp.getKey().toString(); String sKeyValue </span>= ""<span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">if</span> (eTmp.getValue() == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { sKeyValue </span>= "0"<span style="color: rgba(0, 0, 0, 1)">; } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { sKeyValue </span>=<span style="color: rgba(0, 0, 0, 1)"> eTmp.getValue().toString(); } </span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (sKeyTmp) { </span><span style="color: rgba(0, 0, 255, 1)">case</span> "statDate"<span style="color: rgba(0, 0, 0, 1)"> : </span><span style="color: rgba(0, 0, 255, 1)">if</span> ("0"<span style="color: rgba(0, 0, 0, 1)">.equals(sKeyValue)) { colums.put(</span>"DATE", dateFormat.format(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date())); } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> { System.out.println(</span>"test" +<span style="color: rgba(0, 0, 0, 1)"> sKeyValue); colums.put(</span>"DATE"<span style="color: rgba(0, 0, 0, 1)">, dateFormat.format(eTmp.getValue())); } </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "cityName"<span style="color: rgba(0, 0, 0, 1)"> : </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> String cityName = TCity.dao </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .getCityInfoByCityCd(sKeyValue).get(0) </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .getStr("city_name");</span> colums.put("CITY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "userSum"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"TOTALUSER"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "newUserSum"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"NEWADD"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserDay"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"ACTIVEDAY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserWeek"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"ACTIVEWEEK"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserMonth"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"ACTIVEMONTH"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "openTimes"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"APPOPEN"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "avgTimeDay"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"AVGDAY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; </span><span style="color: rgba(0, 0, 255, 1)">case</span> "avgTimeWeek"<span style="color: rgba(0, 0, 0, 1)"> : colums.put(</span>"AVGWEEK"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue); </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">; } } appDetail.add(record); } } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> { cursor.close(); mongoClient.closeMongoClient(); }</span></pre>