MongoDB Java 原生使用示例

简介

MongoDB作为一个常用的数据库,Spring对其也进行了很好的支持,但了解Java如何原生使用对应使用Spring Data封装后的API是很有帮助的

代码示例

本篇中就简单用一个单例示例进行展示,其中对常用的方法进行简单的封装

对常用的增删改查进行了简单的封装,大致如下

import com.mongodb.client.*;
import com.mongodb.client.result.UpdateResult;
import org.apache.log4j.Logger;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static com.mongodb.client.model.Filters.eq;

/**
 * MongoDB工具类,只存在一个,使用单例模式实现,其方法使用示例在测试文档中有 MongoDBUtilTest
 */
public class MongoDBUtil {
   
    private static final Logger logger = Logger.getLogger(MongoDBUtil.class);
    private MongoClient client = null;
    private MongoDatabase database = null;

    /**
     * 静态内部类单例模式实现
     */
    private static class MySingleHandler {
   
        private static MongoDBUtil instance = new MongoDBUtil();
    }

    public static MongoDBUtil getInstance(){
   
        return MySingleHandler.instance;
    }

    /**
     * 初始化,从配置文件中读取MongoDB地址、端口、数据库进行连接
     */
    private MongoDBUtil() {
   
        try {
   
            String host = (String) Holder.get("mongodb.host");
            String port = (String) Holder.get("mongodb.port");
            String url = "mongodb://" + host + ":" + port;
            client = MongoClients.create(url);
            database = client.getDatabase((String) Holder.get("mongodb.database"));
            logger.info("MongoDB connect successful!");
        }catch (Exception e) {
   
            System.out.println(e.getClass().getName() + ": " + e.getMessage());
        }
    }

    /**
     * 单条数据插入
     * @param data 数据
     * @param collectionName collection名
     */
    public void addOne(Map<String, Object> data, String collectionName) {
   
        MongoCollection<Document> collection = database.getCollection(collectionName);
        collection.insertOne(new Document(data));
    }

    /**
     * 多条数据插入
     * @param maps 数据列表
     * @param collectionName 集合名
     */
    public void addMany(List<Map<String, Object>> maps, String collectionName) {
   
        List<Document> documents = new ArrayList<Document>();
        for(Map<String, Object> map : maps) {
   
            documents.add(new Document(map));
        }

        MongoCollection<Document> collection = database.getCollection(collectionName);
        collection.insertMany(documents);
    }

    /**
     * 单条数据替换(更新),不存在时可以强制插入
     * @param key 需要替换数据的字典中的key(对应MySQL表的字段名)
     * @param value key对应的值(对应MySQL表的字段值)
     * @param newMap 完整的新的数据
     * @param collectionName collection(表)名称
     * @param isInsert 如果数据库中不存在此数据,是否插入当条数据到数据库中
     */
    public void replaceOne(String key, Object value, Map<String, Object> newMap, String collectionName, boolean isInsert) {
   
        Bson filter = eq(key, value);
        String mongoIdKey = "_id";
        if (key.equals(mongoIdKey)) {
   
            filter = eq(key, new ObjectId((String) value));
        }

        MongoCollection<Document> collection = database.getCollection(collectionName);
        UpdateResult result = collection.replaceOne(filter, new Document(newMap));
        if(result.getMatchedCount() == 0 && isInsert) {
   
            MongoDBUtil.getInstance().addOne
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值