java操作mongodb增删改查spring boot

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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yjw1007020425/article/details/80221319