maven mysql转mongodb_mongoDB数据库和Spring MVC的整合

之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结。

第一步:加载jar、maven配置

org.mongodb

mongo-java-driver

3.3.0

org.springframework.data

spring-data-mongodb

1.7.1.RELEASE

第二步:配置

1、集群配置

applicationContext.xml

配置文件common-config.properties

mongodb.database=cxstatistics

mongodb.replicaSet= 10.0.11.28:27017,10.0.11.29:27017,10.0.11.30:27017

2、单机配置

applicationContext.xml

配置文件common-config.properties

mongo.dbname =test_db #数据库名称

mongo.password=test_pwd #密码

mongo.username=test_user #用户名

mongo.host= 127.0.0.1#主机

mongo.port= 27017#端口号

mongo.connectionsPerHost= 8#一个线程变为可用的最大阻塞数

mongo.threadsAllowedToBlockForConnectionMultiplier= 4#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值

mongo.connectTimeout= 1500#连接超时时间(毫秒)

mongo.maxWaitTime= 1500#最大等待时间

mongo.autoConnectRetry= true#自动重连

mongo.socketKeepAlive= true#scoket保持活动

mongo.socketTimeout=1500#scoket超时时间

mongo.slaveOk=true #读写分离

第三步、MongoDB的增删改查

1、Mongodb对象模型

Interview.java

@Document(collection="pagelog")public class Interview implementsSerializable {/****/

private static final long serialVersionUID = 1L;

@IdprivateString id;privateString time;privateString desc;private long_createtime;privateInteger _processed;private longfid;privateString templateType;private longpuid;publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getTime() {returntime;

}public voidsetTime(String time) {this.time =time;

}publicString getDesc() {returndesc;

}public voidsetDesc(String desc) {this.desc =desc;

}public longget_createtime() {return_createtime;

}public void set_createtime(long_createtime) {this._createtime =_createtime;

}publicInteger get_processed() {return_processed;

}public voidset_processed(Integer _processed) {this._processed =_processed;

}public longgetFid() {returnfid;

}public void setFid(longfid) {this.fid =fid;

}publicString getTemplateType() {returntemplateType;

}public voidsetTemplateType(String templateType) {this.templateType =templateType;

}public longgetPuid() {returnpuid;

}public void setPuid(longpuid) {this.puid =puid;

}

}

Pagecount.java

@Document(collection="countlog")public class Pagecount implementsSerializable{/****/

private static final long serialVersionUID = 1L;

@IdprivateString id;privateString time;//private long fid;

List fid = new ArrayList();//private Integer pagenum;

List pagenum = new ArrayList();publicString getTime() {returntime;

}public voidsetTime(String time) {this.time =time;

}public ListgetFid() {returnfid;

}public void setFid(Listfid) {this.fid =fid;

}public ListgetPagenum() {returnpagenum;

}public void setPagenum(Listpagenum) {this.pagenum =pagenum;

}

}

2、查询示例代码

接口:

/*** 得到时间区间内的统计数据

*@parambeginDate

*@paramendDate

*@return

*/

public longgetInterviewNum(String beginDate, String endDate);

/*** 得到时间区间内根据fid排序的统计数据list

*@parambeginDate

*@return

*/

public List getPageGroup(String beginDate);

接口实现:

@Override

@Path("getInterviewNum")

@GET

@Produces({"application/json; charset=UTF-8"})public long getInterviewNum(@QueryParam("beginDate")String beginDate, @QueryParam("endDate")String endDate) {long Num=mongo.count(new Query(Criteria.where("time").gt(beginDate).lte(endDate)), Interview.class);returnNum;

}

@Override

@Path("getPageGroup")

@GET

@Produces({"application/json; charset=UTF-8"})public List getPageGroup(@QueryParam("beginDate")String beginDate) {

Criteria criatira= newCriteria();

criatira.andOperator(Criteria.where("time").is(beginDate));

List pagecount = new ArrayList();

String year= beginDate.substring(0,4);

String month=beginDate.substring(5);

mongo.getDb().eval("pagelog("+year+","+month+")");//mongo.getDb().eval("pagelog("+beginDate+")", pagecount);

pagecount= mongo.find(new Query(criatira).with(new Sort(new Order(Direction.DESC, "pagenum"))), Pagecount.class);returnpagecount;

}

控制层:

@Path("")public classInterviewController {

@Autowired

StatisticsService statisticsService;

@Post("/interview")

@Get("/interview")

@AdminLoginRequiredpublicString index(Invocation inv) {

Calendar c=Calendar.getInstance();

c.add(Calendar.MONTH,-1);

SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");

String mDateTime=formatter.format(c.getTime());

inv.addModel("dateTime", new SimpleDateFormat("yyyy-MM-dd").format(newDate()));

inv.addModel("mDateTime", mDateTime);return "/views/statistics/interview.vm";

}

@Post("/getInterview")

@Get("/getInterview")public String getInterview(Invocation inv,@Param("beginDate")String beginDate,@Param("endDate")String endDate){long Num =statisticsService.getInterviewNum(beginDate, endDate);

inv.addModel("Num", Num);

JSONObject json= newJSONObject();

json.put("Num", Num);return "@"+json;

}

@Post("/interviewGroup")

@Get("/interviewGroup")

@AdminLoginRequiredpublicString indexGroup(Invocation inv) {

Calendar c=Calendar.getInstance();

c.add(Calendar.MONTH,-1);

SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM");

String mDateTime=formatter.format(c.getTime());

inv.addModel("mDateTime", mDateTime);return "/views/statistics/interviewGroup.vm";

}

@Post("/getPageGroup")

@Get("/getPageGroup")public String getPageGroup(Invocation inv,@Param("beginDate")String beginDate){

List Pagecount = new ArrayList();

Pagecount=statisticsService.getPageGroup(beginDate);

JSONObject json= newJSONObject();

json.put("list", Pagecount);return "@"+json;

}

}

3、mongoDB存储过程:

function(year,month){

var time=year+'-'+month;if(month<10){

time=year+'-0'+month;

}

var num=[];

var fid=[];

db.getCollection('pagelog').aggregate([ { $match : {'time':{$regex: "^" + time + ".*$"}} },{$group : { _id : "$fid", num : {$sum : 1}}}]).forEach(function(obj){

num.push(obj.num);

fid.push(obj._id);

})

document1=num;

document2=fid;

db.countlog.update({'time':time},{$set:{'fid':document2,'pagenum':document1,'time':time}},true,true);returntime;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值