Springboot 整合mongodb以及mongo数据操作工具类代码实现

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot 整合mongodb以及mongo数据操作工具类代码实现相关的知识,希望对你有一定的参考价值。

pom文件里添加mongodb依赖

        <!-- mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

application.yml配置文件 添加mongodb 配置

spring:
  data:
    mongodb:
      host: 172.16.10.201
      username: process
      password: process
      port: 27017
      database: bladex

mongodb操作工具类


import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.formula.functions.T;
import org.bson.Document;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.*;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

/**
 * Mongo db工具类
 *
 * @author tarzan
 * @version 1.0
 * @company 北斗天地股份有限公司
 * @copyright (c) 2020 Niubility Tiger Co.LTD.All rights reserved.
 * @date 2022年03月08日 10:44:18
 * @since JDK1.8
 */
@Lazy
@Component
public class MongoUtil 
    /** 无条件查询 */
    public static final Query EMPTY_QUERY = new BasicQuery("");

    public static MongoTemplate template;

    static 
        MongoUtil.template = SpringUtil.getBean(MongoTemplate.class);
    

    /**
     * 方法描述: query-by-id
     *
     * @param id
     * @Return @link Query
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:20:20
     */
    private static Query idQuery(String id) 
        Criteria criteria = Criteria.where("id").is(id);
        return Query.query(criteria);
    

    /**
     * 方法描述: multi-key-eq-val-query
     *
     * @param data
     * @Return @link Query
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:20:45
     */
    public static Query eqQuery(Map<String, Object> data) 
        if (CollectionUtils.isEmpty(data)) 
            return EMPTY_QUERY;
        
        Criteria criteria = new Criteria();
        for (Map.Entry<String, Object> entry : data.entrySet()) 
            criteria.and(entry.getKey()).is(entry.getValue());
        
        return Query.query(criteria);
    

    /**
     * 方法描述: single-key-eq-val-query
     *
     * @param field
     * @param val
     * @Return @link Query
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:21:13
     */
    public static Query eqQuery(String field, Object val) 
        assert !StringUtils.isEmpty(field);
        Criteria criteria = Criteria.where(field).is(val);
        return Query.query(criteria);
    

    /**
     * 方法描述: collection-name exists
     *
     * @param collectionName
     * @Return @link boolean
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:22:00
     */
    public static boolean collectionExists(String collectionName) 
        return template.collectionExists(collectionName);
    

    /**
     * 方法描述: clazz exists
     *
     * @param clazz
     * @throws
     * @Return @link boolean
     * @author tarzan
     * @date 2019年12月05日 16:29:34
     */
    public static boolean collectionExists(Class<?> clazz) 
        return template.collectionExists(clazz);
    

    /**
     * 方法描述: find by id
     *
     * @param id
     * @param clazz
     * @Return @link K
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:24:28
     */
    public static <K> K findById(String id, Class<K> clazz) 
        return template.findOne(idQuery(id), clazz);
    

    /**
     * 方法描述: get mongo collection by tableName
     *
     * @param tableName
     * @Return @link MongoCollection< Document>
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:25:17
     */
    public static MongoCollection<Document> getCollection(String tableName) 
        assert !StringUtils.isEmpty(tableName);
        return template.getCollection(tableName);
    

    /**
     * 方法描述: create mongo collection by tableName
     *
     * @param tableName
     * @Return @link MongoCollection< Document>
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:25:32
     */
    public static MongoCollection<Document> createCollection(String tableName) 
        assert !StringUtils.isEmpty(tableName);
        if (collectionExists(tableName)) 
            return getCollection(tableName);
        
        return template.createCollection(tableName);
    

    /**
     * 方法描述:  create mongo collection by tableName and collection-options
     *
     * @param tableName
     * @param options
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:27:20
     */
    public static void createCollection(String tableName, CollectionOptions options) 
        assert !StringUtils.isEmpty(tableName);
        if (collectionExists(tableName)) 
            return;
        
        template.createCollection(tableName, options);
    

    /**
     * 方法描述: create mongo collection by clazz
     *
     * @param clazz
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:29:03
     */
    public static void createCollection(Class<?> clazz) 
        assert clazz != null;
        if (collectionExists(clazz)) 
            return;
        
        template.createCollection(clazz);
    

    /**
     * 方法描述: drop collection
     *
     * @param tableName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:29:18
     */
    public static void dropCollection(String tableName) 
        assert !StringUtils.isEmpty(tableName);
        template.dropCollection(tableName);
    

    /**
     * 方法描述: insert
     *
     * @param t
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:29:28
     */
    public static void insert(Object t) 
        assert t != null;
        template.insert(t);
    

    /**
     * 方法描述:  batch insert in specified  table
     *
     * @param coll
     * @param tableName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:29:41
     */
    public static <K> void insertBatch(Collection<K> coll, String tableName) 
        assert !StringUtils.isEmpty(tableName) && !CollectionUtils.isEmpty(coll);
        template.insert(coll, tableName);
    

    /**
     * 方法描述: batch insert (support multi tables)
     *
     * @param coll
     * @Return @link boolean
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:30:34
     */
    public static <K> boolean insertAll(Collection<K> coll) 
        assert !CollectionUtils.isEmpty(coll);
        template.insertAll(coll);
        return true;
    

    /**
     * 方法描述: insert or update
     *
     * @param t
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:31:03
     */
    public static <K> void save(K t) 
        assert t != null;
        template.save(t);
    

    /**
     * 方法描述: update first
     *
     * @param t
     * @param collectionName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:31:40
     */
    public static <K> void save(K t, String collectionName) 
        assert t != null && !StringUtils.isEmpty(collectionName);
        template.save(t, collectionName);
    

    /**
    * 方法描述: update first
    *
    * @param query
    * @param update
    * @param tableName
    * @Return @link boolean
    * @throws
    * @author tarzan
    * @date 2022年03月08日 11:31:50
    */
    public static boolean updateFirst(Query query, Update update, String tableName) 
        assert update != null && !StringUtil.isEmpty(tableName);
        UpdateResult wr = template.updateFirst(query, update, tableName);
        return wr.getModifiedCount() == 1;
    

    /**
     * 方法描述: update by id
     *
     * @param id
     * @param obj
     * @param clazz
     * @Return @link boolean
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:32:03
     */
    public static <K> boolean updateById(String id, JSONObject obj, Class<?> clazz) 
        DBObject update = new BasicDBObject();
        obj.put("update_time", new Date());
        update.put("$set", obj);
        UpdateResult result = template.updateFirst(idQuery(id), new BasicUpdate(update.toString()), clazz);
        return result.getModifiedCount() == 1;
    

    /**
     * 方法描述: auto-inc specified  filed by id
     *
     * @param id
     * @param field
     * @param type
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:32:22
     */
    public static <K> void updateIncById(String id, String field, Class<K> type) 
        Query query = idQuery(id);
        Update inc = new Update().inc(field, 1);
        template.updateFirst(query, inc, type);
    

    /**
     * 方法描述:  auto-inc specified  field by id
     *
     * @param id
     * @param field
     * @param collectionName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:32:47
     */
    public static void updateIncById(String id, String field, String collectionName) 
        Query query = idQuery(id);
        Update inc = new Update().inc(field, 1);
        template.updateFirst(query, inc, collectionName);
    

    /**
     * 方法描述:  auto-inc specified  field specified step by id
     *
     * @param id
     * @param field
     * @param step
     * @param type
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:33:10
     */
    public static <K> void updateIncById(String id, String field, Integer step, Class<K> type) 
        if (step == 0) 
            return;
        
        Query query = idQuery(id);
        Update inc = new Update().inc(field, step);
        template.updateFirst(query, inc, type);
    

    /**
     * 方法描述:  auto-inc specified  field specified step by id
     *
     * @param id
     * @param field
     * @param num
     * @param collectionName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:33:10
     */
    public static void updateIncById(String id, String field, Integer num, String collectionName) 
        if (num == 0) 
            return;
        
        Query query = idQuery(id);
        Update inc = new Update().inc(field, num);
        template.updateFirst(query, inc, collectionName);
    

    /**
     * 方法描述: multi update in specified table
     *
     * @param query
     * @param update
     * @param tableName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:34:20
     */
    public static void updateMulti(Query query, Update update, String tableName) 
        template.updateMulti(query, update, tableName);
    

    /**
     * 方法描述: 条件统计
     *
     * @param query
     * @param collectionName
     * @throws
     * @Return @link long
     * @author tarzan
     * @date 2019年12月05日 16:16:19
     */
    public static long count(Query query, String collectionName) 
        return template.count(query, collectionName);
    

    /**
     * 方法描述: search
     *
     * @param query
     * @param clazz
     * @Return @link List<K>
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:34:52
     */
    public static <K> List<K> find(Query query, Class<K> clazz) 
        return template.find(query, clazz);
    

    /**
     * 方法描述: delete by id
     *
     * @param id
     * @param collectionName
     * @Return @link boolean
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:35:05
     */
    public static boolean deleteById(String id, String collectionName) 
        DeleteResult result = template.remove(idQuery(id), collectionName);
        return result.getDeletedCount() == 1;
    

    /**
     * 方法描述: delete by id
     *
     * @param id
     * @param clazz
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:35:17
     */
    public static void deleteById(String id, Class<?> clazz) 
        template.remove(idQuery(id), clazz);
    

    /**
     * 方法描述: batch delete
     *
     * @param query
     * @param collectionName
     * @Return
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:35:29
     */
    public static void deleteBatch(Query query, String collectionName) 
        template.remove(query, collectionName);
    

    /**
     * 方法描述: count
     *
     * @param query
     * @param clazz
     * @Return @link long
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:34:41
     */
    public static long count(Query query, Class<T> clazz) 
        return template.count(query, clazz);
    

    /**
     * 方法描述: count by id ( determinte the record exists )
     *
     * @param id
     * @param collectionName
     * @Return @link long
     * @throws
     * @author tarzan
     * @date 2022年03月08日 11:35:40
     */
    public static long countById(String id, String collectionName) 
        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(collectionName)) 
            return 0L;
        
        return template.count(idQuery(id), collectionName);
    

    public static void resolve(T t) 

    


分页实现代码demo

    @Override
    public Page<UnifyDownholeDrill> getPage(int current,int size) 
        Query mongoQuery = new Query();
        long count = mongoTemplate.count(mongoQuery, UnifyDownholeDrill.class);
        Pageable pageable = PageRequest.of((current - 1) * size, size);
        List<UnifyDownholeDrill> pageList = mongoTemplate.find(mongoQuery.with(pageable), UnifyDownholeDrill.class);
        Page<UnifyDownholeDrill> page = new PageImpl<UnifyDownholeDrill>(pageList, pageable, count);
        return page;
    

以上是关于Springboot 整合mongodb以及mongo数据操作工具类代码实现的主要内容,如果未能解决你的问题,请参考以下文章

Springboot 整合mongodb 操作工具类仿mybatis-plus风格

MongoDB简介与应用场景Docker安装Mongo整合SpringBoot实现CRUD

Springboot整合MongoDB的Docker开发,其它应用也类似

SpringBoot整合MongoDB

SpringBoot整合MongoDB教程

SpringBoot整合MongoDB教程