栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java代码操作Mongodb(优化)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java代码操作Mongodb(优化)

上一篇 java代码操作mongodb 我们针对某一个集合操作写了一些代码,但是这个这是针对某一个集合的,通用性不好,现在弄一个工具类出来优化一下。

新建一个工具类 baseMongoRepository

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.io.Serializable;
import java.util.List;


public interface baseMongoRepository {
    T get(ID id);

    T save(T param);

    T save(T param, String collectionName);

    long delete(ID id);

    long deleteAll(List ids);

     List find(Query query, Class c);

    List findAll();

    List findByCondition(Query query);

    public  T findOne(Query query) ;

    T findOne(Query query, String documentName) ;

    List findByCondition(Query query, Sort sort);

    public T findAndModify(Query query, Update update);

    void insertAll(List paramList);

    void insert(T param);

    Page queryByConditionPage(Query query, PageRequest request);

    public Page queryByConditionPage(Query query, PageRequest request, Sort sort);

     Page queryByConditionPage(Query query, PageRequest pageable, Sort sort, Class c);

     Page queryByConditionPage(Query query, PageRequest pageable, Sort sort, Class c, String collectionName);

    void updateFirst(Query query, Update update);


    void update(Query query, Update update);

    T updateById(Object id, Update update);

    void updateFirst(Query query, Update update, String documentName);

    void updateMulti(Query query, Update update, String documentName);

}

实现类,添加了增删改查的基本方法,可以直接调用

import com.mongodb.client.result.DeleteResult;
import com.purcotton.notice.repository.baseMongoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.document;
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 java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;



public class baseMongoRepositoryImpl implements baseMongoRepository {

    @Autowired
    protected MongoTemplate mongoTemplate;

    protected Class repositoryClass = this.currentEntityClass();

    protected String collectionName = this.currentEntityCollection();


    private String currentEntityCollection() {
        Class t = this.currentEntityClass();
        document document = t.getAnnotation(document.class);
        return document.collection();
    }

    
    private Class currentEntityClass() {
        return (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    
    
    @Override
    public T save(T param) {
        mongoTemplate.save(param);
        return param;
    }

    
    @Override
    public T save(T param, String collectionName) {
        mongoTemplate.save(param, collectionName);
        return param;
    }

    
    @Override
    public void insert(T param) {
        mongoTemplate.insert(param);
    }

    
    @Override
    public void insertAll(List paramList) {
        mongoTemplate.insertAll(paramList);
    }
    
    @Override
    public T findAndModify(Query query, Update update) {
        FindAndModifyOptions options = new FindAndModifyOptions();
        options.upsert(true);
        options.returnNew(true);
        return mongoTemplate.findAndModify(query, update, options, repositoryClass);

    }

    
    @Override
    public long deleteAll(List ids) {
        DeleteResult result = mongoTemplate.remove(new Query(Criteria.where("_id").in(ids)), repositoryClass);
        return result.getDeletedCount();
    }

    
    @Override
    public long delete(Serializable id) {
        DeleteResult result = mongoTemplate.remove(new Query(Criteria.where("_id").is(id)), repositoryClass);
        return result.getDeletedCount();
    }

    
    @Override
    public T get(Serializable id) {
        return mongoTemplate.findById(id, repositoryClass);
    }

    
    @Override
    public  List find(Query query, Class c) {
        return mongoTemplate.find(query, c, collectionName);
    }

    
    @Override
    public List findAll() {
        return mongoTemplate.findAll(repositoryClass);
    }

    
    @Override
    public List findByCondition(Query query) {
        return mongoTemplate.find(query, repositoryClass);
    }

    
    @Override
    public List findByCondition(Query query, Sort sort) {
        query.with(sort);
        return mongoTemplate.find(query, repositoryClass);
    }

    
    @Override
    public T findOne(Query query) {
        return mongoTemplate.findOne(query, repositoryClass);
    }

    
    @Override
    public T findOne(Query query, String documentName) {
        return mongoTemplate.findOne(query, repositoryClass, documentName);
    }


    
    @Override
    public Page queryByConditionPage(Query query, PageRequest pageable) {
        long count = mongoTemplate.count(query, repositoryClass);
        query.limit(pageable.getPageSize());
        query.skip((long) (pageable.getPageNumber() - 1) * pageable.getPageSize());
        List list = mongoTemplate.find(query, repositoryClass);
        return new PageImpl<>(list, PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()), count);
    }

    
    @Override
    public Page queryByConditionPage(Query query, PageRequest pageable, Sort sort) {
        long count = mongoTemplate.count(query, repositoryClass);
        query.limit(pageable.getPageSize());
        query.skip((long) (pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.with(sort);
        List list = mongoTemplate.find(query, repositoryClass);
        return new PageImpl<>(list, PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()), count);
    }

    @Override
    public  Page queryByConditionPage(Query query, PageRequest pageable, Sort sort, Class c) {
        long count = mongoTemplate.count(query, repositoryClass);
        query.limit(pageable.getPageSize());
        query.skip((long) (pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.with(sort);
        List list = mongoTemplate.find(query, c, collectionName);

        return new PageImpl<>(list, PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()), count);
    }

    @Override
    public  Page queryByConditionPage(Query query, PageRequest pageable, Sort sort, Class c, String collectionName) {
        long count = mongoTemplate.count(query, collectionName);
        query.limit(pageable.getPageSize());
        query.skip((long) (pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.with(sort);
        List list = mongoTemplate.find(query, c, collectionName);

        return new PageImpl<>(list, PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize()), count);
    }

    
    @Override
    public void updateFirst(Query query, Update update) {
        mongoTemplate.updateFirst(query, update, repositoryClass);
    }

    
    @Override
    public void update(Query query, Update update) {
        mongoTemplate.updateMulti(query, update, repositoryClass);
    }

    @Override
    public void updateFirst(Query query, Update update, String documentName) {
        mongoTemplate.upsert(query, update, documentName);
    }

    
    @Override
    public T updateById(Object id, Update update) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        mongoTemplate.updateFirst(query, update, repositoryClass);
        return mongoTemplate.findById(id, repositoryClass);
    }

    
    @Override
    public void updateMulti(Query query, Update update, String documentName) {
        mongoTemplate.updateMulti(query, update, documentName);
    }
}

修改之前的UserdocumentServiceImpl的调用方式

import com.purcotton.notice.document.Userdocument;
import com.purcotton.notice.repository.impl.baseMongoRepositoryImpl;
import com.purcotton.obj.response.PageResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
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.stereotype.Service;

import java.util.List;


@Slf4j
@Service
public class UserdocumentServiceImpl extends baseMongoRepositoryImpl {
    @Autowired
    MongoTemplate mongoTemplate;

    public static final String KEY = "user_document_test";

    
    public Userdocument addUser(Userdocument userdocument) {
        userdocument.insertParam("tom");
        // 方式一
//        Userdocument d = mongoTemplate.save(userdocument, KEY);

        // 方式二
        Userdocument d = (Userdocument) super.save(userdocument);
        return d;
    }

    
    public PageResponse findUserPage(Userdocument userdocument) {
        Query query = conditionQuery(userdocument);

        // 方式一
//        long count = mongoTemplate.count(query, KEY);
//        query.limit(userdocument.getPageSize());
//        query.skip((long) (userdocument.getPageNum() - 1) * userdocument.getPageSize());
//        List list = mongoTemplate.find(query, Userdocument.class, KEY);

//        PageImpl page = new PageImpl<>(list, PageRequest.of(userdocument.getPageNum() - 1, userdocument.getPageSize()), count);
        
        // 方式二
        Page page = super.queryByConditionPage(query, PageRequest.of(userdocument.getPageNum(), userdocument.getPageSize()));

        PageResponse data = new PageResponse<>();
        data.setPageNum(Long.parseLong(userdocument.getPageNum() + 1 + ""));
        data.setPageSize(Long.parseLong(userdocument.getPageSize() + ""));
        data.setList(page.toList());
        data.setTotal(page.getTotalElements());

        return data;
    }

    
    public Userdocument findById(String id) {
        Userdocument one = mongoTemplate.findById(id, Userdocument.class, KEY);
        return one;
    }

    
    public List findAllData() {
        // 方式一
//        return mongoTemplate.findAll(Userdocument.class, KEY);
        // 方式二
        return super.findAll();
    }

    
    private Query conditionQuery(Userdocument userdocument) {
        Criteria c = new Criteria();
        if (StringUtils.isNotEmpty(userdocument.getUserName())) {
            // 模糊查询
            c.and("userName").regex(".*" + userdocument.getUserName() + ".*");
        }
        if (userdocument.getStatus() != null) {
            c.and("status").is(userdocument.getStatus());
        }
        if (userdocument.getAge() != null) {
            // 大于等于小于等于查询
            c.and("age").lte(userdocument.getAge()).gte(userdocument.getAge());
        }
        if (StringUtils.isNotEmpty(userdocument.getAddress())) {
            c.and("address").regex("*." + userdocument.getAddress() + ".*");
        }
        if (StringUtils.isNotEmpty(userdocument.getPhone())) {
            c.and("phone").is(userdocument.getPhone());
        }
        if (StringUtils.isNotEmpty(userdocument.getCreateTime())) {
            c.and("createTime").gte(userdocument.getCreateTime());
        }
        Query query = new Query(c);
        return query;
    }

    
    public List findByCondition(Userdocument userdocument) {
        Query query = conditionQuery(userdocument);
        // 方式一
//        List list = mongoTemplate.find(query, Userdocument.class, KEY);

        // 方式二
        List list = super.find(query, Userdocument.class);
        return list;
    }

    
    public Userdocument update(Userdocument userdocument) {
        if (StringUtils.isEmpty(userdocument.getId())) {
            return null;
        }
        Query query = new Query(Criteria.where("_id").is(userdocument.getId()));
        Update update = new Update();
        update.set("userName",userdocument.getUserName());
        update.set("age",userdocument.getAge());
        update.set("status",userdocument.getStatus());
        update.set("address",userdocument.getAddress());
        update.set("sex",userdocument.getSex());
        update.set("phone",userdocument.getPhone());
        update.set("email",userdocument.getEmail());
        userdocument.updateParam("tom");
        // 方式一
//        mongoTemplate.updateFirst(query, update, KEY);

        // 方式二
        super.updateFirst(query, update);

        return findById(userdocument.getId());
    }

    
    public void deleteById(String id) {
        Query query = new Query(Criteria.where("_id").is(id));
        // 方式一
//        mongoTemplate.remove(query, KEY);

        // 方式二
        super.delete(id);
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号