java 操作MongoDB

本文介绍了一种使用Java进行MongoDB数据库操作的方法,包括实体类定义、工具类封装、DAO接口及其实现等,并提供了具体的测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要的jar包和安装包:https://pan.baidu.com/s/1P6ZxuWFtKrTU7eRRV9OkAg 密码: kf76

我用Robo 3T 1.1.1作为MongoDB的GUI界面,有需要可以用,用cmd控制台也行。

看看Robo 3T界面

失效给dh2531@foxmail.com发送邮件。

代码需要一定的java基础,泛型he

1.entity实体类

package entity;

public class Emp {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Emp{" + "id=" + id + ", name='" + name + '\'' + '}';
    }
}

2.util 类(MongoDBUtil1封装MongoDB操作,Bean2DBObject转换对象

package util;

import com.mongodb.*;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class MongoDBUtil1 {

    private static Mongo mongo = null;
    private MongoDBUtil1(){
        super();
    }

    private static String host;
    private static int port;
    private static String dbName;

    static {
        InputStream in = null;
        Properties prop = new Properties();
        try{
            if(in==null) in = MongoDBUtil1.class.getResourceAsStream("../MongoDB.properties");
            prop.load(in);
            host = prop.getProperty("host");
            port = Integer.parseInt(prop.getProperty("port"));
            dbName = prop.getProperty("dbName");
        }catch (IOException e){
            System.out.println("读配置文件出错");
            e.printStackTrace();
        }finally {
            System.out.println("读配置文件end");
        }

    }

    public static void insert(Object obj,String table){
        if (mongo==null) mongo = new Mongo(host,port);
        try{
            DB db = mongo.getDB(dbName);
            DBCollection dbCollection = db.getCollection(table);
            if (dbCollection==null) {
                DBObject dbObj = new BasicDBObject();
                dbCollection = db.createCollection(table,dbObj);
            }
            dbCollection.insert(Bean2DBObject.bean2DBObject(obj));
        }catch (Exception e){
            System.out.println("插入出错");
        }finally {
            if (mongo!=null) mongo.close();
        }
    }

    public static List find(Object obj,String table,String field) {
        if (mongo==null) mongo = new Mongo(host,port);
        try{
            DB db = mongo.getDB(dbName);
            DBCollection dbCollection = db.getCollection(table);
            if (dbCollection==null) {
                DBObject dbObj = new BasicDBObject();
                dbCollection = db.createCollection(table,dbObj);
            }
            BasicDBObject searchQuery = new BasicDBObject();
            Object fieldValue=null;

            Class clazz=obj.getClass();
            BeanInfo beanInfo= Introspector.getBeanInfo(clazz);
            PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
            for(PropertyDescriptor pd:pds){
                if(pd.getName().equals(field)){
                    System.out.println(field+":"+pd.getReadMethod());
                    Method getter=pd.getReadMethod();
                    if (!getter.isAccessible()) getter.setAccessible(true);
                    fieldValue = getter.invoke(obj);
                }
            }

            if (fieldValue==null) {
                return null;
            } else if (fieldValue instanceof Integer) {
                // 判断变量的类型
                int value = ((Integer) fieldValue).intValue();
                searchQuery.put(field, value);
            } else if (fieldValue instanceof String) {
                String value = (String) fieldValue;
                searchQuery.put(field, value);
            } else if (fieldValue instanceof Double) {
                double value = ((Double) fieldValue).doubleValue();
                searchQuery.put(field, value);
            } else if (fieldValue instanceof Float) {
                float value = ((Float) fieldValue).floatValue();
                searchQuery.put(field, value);
            } else if (fieldValue instanceof Long) {
                long value = ((Long) fieldValue).longValue();
                searchQuery.put(field, value);
            } else if (fieldValue instanceof Boolean) {
                boolean value = ((Boolean) fieldValue).booleanValue();
                searchQuery.put(field, value);
            } else if (fieldValue instanceof Date) {
                Date value = (Date) fieldValue;
                searchQuery.put(field, value);
            }
            DBCursor cur = dbCollection.find(searchQuery);
            List<Object> results = new ArrayList<Object>();
            while (cur.hasNext()){
                results.add(cur.next());
            }
            return results;
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            if (mongo!=null) mongo.close();
        }
        return null;
    }

}
package util;

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;

import java.lang.reflect.Field;
import java.util.Date;

public class Bean2DBObject {

    /**
     * 将实体Bean对象转换为DBObject
     */
    public static <T> DBObject bean2DBObject(T bean) throws IllegalAccessException {
        if(bean == null) return null;
        DBObject dbObject = new BasicDBObject();
        //获得对象类的属性域
        Field[] fields = bean.getClass().getDeclaredFields();
        for(Field field:fields){
            //获得变量属性名
            String varName = field.getName();
            if(!field.isAccessible())field.setAccessible(true);
            Object param = field.get(bean);
            //System.out.println(param);
            if (param==null){
                continue;
            }else if (param instanceof Integer) {
                // 判断变量的类型
                int value = ((Integer) param).intValue();
                dbObject.put(varName, value);
            } else if (param instanceof String) {
                String value = (String) param;
                dbObject.put(varName, value);
            } else if (param instanceof Double) {
                double value = ((Double) param).doubleValue();
                dbObject.put(varName, value);
            } else if (param instanceof Float) {
                float value = ((Float) param).floatValue();
                dbObject.put(varName, value);
            } else if (param instanceof Long) {
                long value = ((Long) param).longValue();
                dbObject.put(varName, value);
            } else if (param instanceof Boolean) {
                boolean value = ((Boolean) param).booleanValue();
                dbObject.put(varName, value);
            } else if (param instanceof Date) {
                Date value = (Date) param;
                dbObject.put(varName, value);
            }
        }
        return dbObject;
    }
}
package util;

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;

import java.lang.reflect.Field;
import java.util.Date;

public class Bean2DBObject {

    /**
     * 将实体Bean对象转换为DBObject
     */
    public static <T> DBObject bean2DBObject(T bean) throws IllegalAccessException {
        if(bean == null) return null;
        DBObject dbObject = new BasicDBObject();
        //获得对象类的属性域
        Field[] fields = bean.getClass().getDeclaredFields();
        for(Field field:fields){
            //获得变量属性名
            String varName = field.getName();
            if(!field.isAccessible())field.setAccessible(true);
            Object param = field.get(bean);
            //System.out.println(param);
            if (param==null){
                continue;
            }else if (param instanceof Integer) {
                // 判断变量的类型
                int value = ((Integer) param).intValue();
                dbObject.put(varName, value);
            } else if (param instanceof String) {
                String value = (String) param;
                dbObject.put(varName, value);
            } else if (param instanceof Double) {
                double value = ((Double) param).doubleValue();
                dbObject.put(varName, value);
            } else if (param instanceof Float) {
                float value = ((Float) param).floatValue();
                dbObject.put(varName, value);
            } else if (param instanceof Long) {
                long value = ((Long) param).longValue();
                dbObject.put(varName, value);
            } else if (param instanceof Boolean) {
                boolean value = ((Boolean) param).booleanValue();
                dbObject.put(varName, value);
            } else if (param instanceof Date) {
                Date value = (Date) param;
                dbObject.put(varName, value);
            }
        }
        return dbObject;
    }
}

3.dao类

import entity.Emp;

import java.util.List;

public interface EmpDao {

    public void insert(Emp e);
    public List find(Emp e);
    public void update(Emp e);
    public void delete(Emp e);
}

4.daoImpl实现类

package daoImpl;

import dao.EmpDao;
import entity.Emp;
import util.MongoDBUtil1;

import java.util.List;

public class EmpDaoImpl implements EmpDao {

    @Override
    public void insert(Emp e) {
        MongoDBUtil1.insert(e,"emp");
        System.out.println("插入完毕");
    }

    @Override
    public List find(Emp e) {
        List<Emp> list = MongoDBUtil1.find(e,"emp","id");
        return list;
    }

    @Override
    public void update(Emp e) {

    }

    @Override
    public void delete(Emp e) {

    }
}

5.resources资源(MongoDB.properties)

host=localhost
port=27017
dbName=ChatRoom

6.测试类

package test;

import dao.EmpDao;
import daoImpl.EmpDaoImpl;
import entity.Emp;
import org.junit.Test;

public class TestDB1 {

    @Test
    public void test1() {
        Emp emp = new Emp();
        emp.setId(1);
        emp.setName("donghui");
        EmpDao dao = new EmpDaoImpl();
        dao.insert(emp);
    }

    @Test
    public void test2() {
        Emp emp = new Emp();
        emp.setId(1);
        emp.setName("donghui");
        EmpDao dao = new EmpDaoImpl();
        System.out.println(dao.find(emp));
    }
}

### Java 操作 MongoDB 的基础 为了实现对MongoDB操作,在Java程序中通常会引入`mongodb-driver-sync`库。此库提供了同步驱动器,允许开发者执行基本的CRUD操作以及更复杂的查询。 #### 创建连接并获取数据库实例 建立与MongoDB服务器的连接是任何交互的第一步。这可以通过`MongoClients.create()`方法完成,该方法返回一个表示客户端连接的对象。对于本地运行的服务,默认情况下监听27017端口[^2]: ```java import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; // 创建一个新的 MongoClient 实例用于连接默认地址 (localhost) 和端口 (27017) MongoClient mongoClient = MongoClients.create(); ``` 接着可以利用获得的客户端对象调用`getDatabase(String dbName)`函数来选定特定名称下的数据库作为工作区: ```java com.mongodb.client.MongoDatabase database = mongoClient.getDatabase("test"); ``` #### 执行 CRUD 操作 ##### 插入文档 向集合内添加新记录涉及构建BSON格式的数据结构并通过适当的方法提交给目标集合。下面的例子展示了怎样往名为“users”的集合里加入一条新的用户信息[^3]: ```java import org.bson.Document; public void insertUser() { Document userDoc = new Document("name", "Alice").append("age", 30); database.getCollection("users").insertOne(userDoc); } ``` ##### 查询文档 检索已存数据同样依赖于Document类定义条件表达式,并传递至find()或findOneAndDelete()等查找接口。这里给出一段简单的代码片段用来展示如何读取所有用户的姓名列表: ```java for (Document doc : database.getCollection("users").find()) { System.out.println(doc.getString("name")); } ``` ##### 更新现有条目 当需要修改某些字段的内容时,则应该准备更新指令连同匹配模式一起交给updateMany()或者replaceOne()这样的命令处理。下述例子说明了更改年龄大于等于30岁的所有人职业为工程师的过程[^5]: ```java database.getCollection("users") .updateMany( Filters.gte("age", 30), Updates.set("job", "engineer") ); ``` ##### 删除指定项 最后如果想要移除符合条件的一条或多条记录,可借助deleteOne()或是deleteMany()来进行相应设置。比如删除名字叫Bob的所有条目的方式如下所示: ```java database.getCollection("users").deleteMany(new Document("name", "Bob")); ``` 以上就是关于使用Java语言控制MongoDB的一些基础知识和技术要点概述[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值