1.spring boot集成mongodb
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.application.xml配置
data:
mongodb:
uri: mongodb://mebcsopr:[email protected]:xxxxx/mebcs
pidms_ccp:
objects:
- type: mongodb
username: ******
password: ******
remote: false
encrypted: true
3.config
package *.common;
import com.paic.icore.agr.common.um.CyberArkService;
import com.paic.icore.agr.common.um.UsernamePasswordPair;
import com.paic.icore.agr.common.utils.AgrLogUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.stereotype.Component;
@Component
public class MongoConfig implements InitializingBean {
private final static Logger log = AgrLogUtils.getLogger(MongoConfig.class);
//只适合magropr 用户
private final static String PREFIX = "mongodb://";
@Autowired
private MongoProperties mongoProperties;
@Autowired
private CyberArkService cyberArkService;
public String getPassword(String uri){
String temp = uri.replace(PREFIX,"");
return temp.substring(0,temp.indexOf("@"));
}
public String setNewPassword(String uri,String newPassword){
StringBuffer stringBuffer = new StringBuffer();
String temp = uri.replace(PREFIX,"");
String user = temp.substring(0,temp.indexOf(":")+1);
temp = temp.substring(temp.indexOf(":")+1,temp.length());
temp = temp.substring(temp.indexOf("@"),temp.length());
stringBuffer.append(PREFIX);
stringBuffer.append(user);
stringBuffer.append(newPassword);
stringBuffer.append(temp);
return stringBuffer.toString();
}
@Override
public void afterPropertiesSet() throws Exception {
String uri = mongoProperties.getUri();
log.info("old mongodb uri={}",uri);
//mongodb://magropr:Ptmagr1234@30.10.0.22:23006/magr
UsernamePasswordPair usernamePasswordPair = cyberArkService.getMongoDB();
String newPassword = usernamePasswordPair.getPassword();
String newUri = setNewPassword(uri,newPassword);
log.info("new mongodb uri={}",newUri);
mongoProperties.setUri(newUri);
}
}
4.增删改查
package com.paic.aims.farmer.farmerinfo.repository;
import com.paic.aims.farmer.farmerinfo.dto.InformationWebListModel;
import com.paic.aims.farmer.farmerinfo.dto.InformationWebModel;
import com.paic.aims.farmer.farmerinfo.model.InformationModel;
import com.paic.icore.agr.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
/**
* @author
* @date 2018/05/04
* 三农资讯切换到mongodb
*/
@Repository
public class InfoRepository {
@Autowired
private MongoTemplate mongoTemplate;
public static String informationId = "informationId";
public static String publishDate = "publishDate";
public static String informationModuleId = "informationModuleId";
public static String informationTypeId = "informationTypeId";
public static String isDeleted = "isDeleted";
public static String informationTypeName = "informationTypeName";
public static String blankString = "";
public static String coverImageId = "coverImageId";
public static String informationModuleName = "informationModuleName";
public static String informationContent = "informationContent";
public static String publishName = "publishName";
public static String informationTitle = "informationTitle";
public static String publishAbstract = "publishAbstract";
public static String updateBy = "updateBy";
public static String updateDate = "updateDate";
/**
*新增数据
* @param info
*/
public int saveInfo(InformationModel info){
mongoTemplate.save(info);
return 1;
}
/**
* 删除数据
* @param id
* @return
*/
/**
* 删除数据
* @param id
* @return
*/
public int deleteInfo(String id){
Query query = new Query();
query.addCriteria(new Criteria(informationId).is(id));
mongoTemplate.findAndRemove(query, InformationModel.class);
return 1;
}
/**
* 根据id查询具体的资讯
* @param id
* @return
*/
public List<InformationWebModel> findInformation(String id){
Query query = new Query();
query.addCriteria(new Criteria(informationId).is(id));
return mongoTemplate.find(query, InformationWebModel.class);
}
/**
* 分页查找 根据条件查找 时间段查找
* 根据索引查询提高效率
* @param info
* @return
* @throws Exception
*/
public List<InformationWebListModel> findInformationPageList(InformationModel info) throws Exception{
Query query = new Query();
query.with(new Sort((new Sort.Order(Sort.Direction.DESC,publishDate))));
if(StringUtils.isBlank(info.getInformationModuleId())){
query.addCriteria(new Criteria(informationModuleId).is(info.getInformationModuleId()));
}
if(StringUtils.isBlank(info.getInformationTypeId())){
query.addCriteria(new Criteria(informationTypeId).is(info.getInformationTypeId()));
}
/**
* 参数判断方法
* 0 都为空
* 1 都不为空
* 2 开始时间不为空
* 3 结束时间不为空
* -1 灵异事件哦
*/
switch (this.getTimeFlag(info.getStartDate(),info.getEndDate())){
case 1 : query.addCriteria(new Criteria(publishDate).gte(info.getStartDate()).lt(info.getEndDate()));
break;
case 2 : query.addCriteria(new Criteria(publishDate).gte(info.getStartDate()));
break;
case 3 : query.addCriteria(new Criteria(publishDate).lt(info.getEndDate()));
break;
default:;
}
query.addCriteria(new Criteria(isDeleted).is(0));
query.skip(info.getBegin()-1);
query.limit(info.getEnd()-info.getBegin()+1).withHint("publishDate_informationId");
List<InformationWebListModel> list = mongoTemplate.find(query, InformationWebListModel.class);
return list;
}
/**
* 获取当前条件下数据数目
* @param info
* @return
*/
public int findInformationPageListCount(InformationModel info){
Query query = new Query();
if(!"".equals(info.getInformationModuleId())){
query.addCriteria(new Criteria(informationModuleId).is(info.getInformationModuleId()));
}
if(!"".equals(info.getInformationTypeId())){
query.addCriteria(new Criteria(informationTypeId).is(info.getInformationTypeId()));
}
/**
* 参数判断方法
* 0 都为空
* 1 都不为空
* 2 开始时间不为空
* 3 结束时间不为空
* -1 灵异事件哦
*/
switch (this.getTimeFlag(info.getStartDate(),info.getEndDate())){
case 1 : query.addCriteria(new Criteria(publishDate).gte(info.getStartDate()).lt(info.getEndDate()));
break;
case 2 : query.addCriteria(new Criteria(publishDate).gte(info.getStartDate()));
break;
case 3 : query.addCriteria(new Criteria(publishDate).lt(info.getEndDate()));
break;
default:;
}
query.addCriteria(new Criteria(isDeleted).is(0));
List<InformationWebListModel> list = mongoTemplate.find(query, InformationWebListModel.class);
return list.size();
}
/**
* 修改数据
* @param info
* @return
*/
public int updateInformation(InformationModel info){
Query query = new Query();
query.addCriteria(new Criteria(informationId).is(info.getInformationId()));
Update update = new Update();
update.set(informationTitle, info.getInformationTitle());
update.set(informationContent, info.getInformationContent());
update.set(publishName, info.getPublishName());
update.set(publishAbstract, info.getPublishAbstract());
if(StringUtils.isBlank(info.getCoverImageId())){
update.set(coverImageId, blankString);
}else{
update.set(coverImageId, info.getCoverImageId());
}
update.set(publishDate, info.getPublishDate());
update.set(informationTypeId, info.getInformationTypeId());
update.set(informationModuleId, info.getInformationModuleId());
update.set(informationTypeName, info.getInformationTypeName());
update.set(informationModuleName, info.getInformationModuleName());
update.set(isDeleted, 0);
update.set(updateBy, info.getUpdateBy());
update.set(updateDate, info.getUpdateDate());
return mongoTemplate.updateMulti(query, update, InformationModel.class).getN();
}
/**
* 参数判断方法
* 0 都为空
* 1 都不为空
* 2 开始时间不为空
* 3 结束时间不为空
* -1 灵异事件哦
* @param startDate
* @param endDate
* @return
*/
public int getTimeFlag(Date startDate,Date endDate){
if(null == startDate && null == endDate){
return 0;
}else if(null != startDate && null != endDate){
return 1;
}else if(null != startDate && null == endDate){
return 2;
}else if(null == startDate && null != endDate){
return 3;
}else{
return -1;
}
}
}