java 操作MongoDB

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

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

看看Robo 3T界面

失效給[email protected]發送郵件。

代碼需要一定的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));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章