1. 程式人生 > >Java MongoDB 3.X 3.04 Crud 增刪查改 deleteMany updateMany updateOne

Java MongoDB 3.X 3.04 Crud 增刪查改 deleteMany updateMany updateOne

User.java 類
package com.guoxin.mongodb.module;

public class User {
	private String id;
	private String title;
	private String date;
	private String content;

	public String getId() {
		return id;
	}

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

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

}

MongoUtil.java 工具類
package com.guoxin.mongodb.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

public class MongoUtil {
	public static MongoUtil mongoUtil = null;
	public static MongoClient mongoClient = null;
	public static MongoDatabase mongoDataBase = null;

	private MongoUtil() {
	}

	public static MongoUtil getInstance() {
		if (mongoUtil == null) {
			mongoUtil = new MongoUtil();
		}
		return mongoUtil;
	}

	public void init() {
		mongoUtil.closeMongoClient();
		mongoUtil.getMongoClient();
		mongoUtil.getMongoDataBase();
	}

	private void getMongoClient() {
		System.out.println("*********** getMongoClient***********");
		try {
			// 使用者名稱 資料庫 密碼
			MongoCredential credential = MongoCredential.createCredential(
					"guoxin01", "guoxin", "123456".toCharArray());
			// IP port
			ServerAddress addr = new ServerAddress("192.168.1.137", 27017);
			mongoClient = new MongoClient(addr, Arrays.asList(credential));
			// 得到資料庫
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void getMongoDataBase() {
		System.out.println("*********** getMongoDataBase***********");
		try {
			if (mongoClient != null) {
				// 得到資料庫
				mongoDataBase = mongoClient.getDatabase("guoxin");
			} else {
				throw new RuntimeException("MongoClient不能夠為空");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void closeMongoClient() {
		System.out.println("*********** closeMongoClient***********");
		if (mongoDataBase != null) {
			mongoDataBase = null;
		}
		if (mongoClient != null) {
			mongoClient.close();
		}
	}

	/**
	 * 將實體類的obj的欄位資訊和內容動態放到mapParams裡面
	 * 
	 * @param mapParams
	 * @param obj
	 * @param method
	 */
	public void dymParms(Object mapParams, Object obj, String method) {
		try {
			if (obj != null) {
				Field[] fields = obj.getClass().getDeclaredFields();
				Class<?>[] arrClazz = new Class[2];
				arrClazz[0] = String.class;
				arrClazz[1] = Object.class;
				Method m = mapParams.getClass().getDeclaredMethod(method,
						arrClazz);
				m.setAccessible(true);
				if (fields != null) {
					for (Field f : fields) {
						f.setAccessible(true);
						Object value = f.get(obj);
						if (null!=value) {
							Class<?> clazz = value.getClass();
							Object[] strs = new Object[2];
							if (clazz == String.class) {
								if ( !"".equals(String.valueOf(value))) {
									strs[0] = f.getName();
									strs[1] = value;
									m.invoke(mapParams, strs);
								}
							} else {
								strs[0] = f.getName();
								strs[1] = value;
								m.invoke(mapParams, strs);
							}
						}
					}
				}
			}
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

MongoDao.java Dao介面

package com.guoxin.mongodb.dao;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;

/**
 * Dao 層介面
 * 
 * @author GuoXin
 *
 */
public interface MongoDao {
	/**
	 * Get Data BY ID
	 * @param db
	 * @param table
	 * @param Id
	 */
	public void queryByID(MongoDatabase db, String table, String Id);

	/**
	 * Insert Data
	 * @param db
	 * @param table
	 * @param obj
	 */
	public void insert(MongoDatabase db, String table, Object obj);

	/**
	 * Delete Data
	 * @param db
	 * @param table
	 * @param obj
	 */
	public void delete(MongoDatabase db, String table, Object obj);

	/**
	 * Update Data
	 * @param db
	 * @param table
	 * @param conditions
	 * @param obj
	 */
	public void update(MongoDatabase db, String table, Object conditions,
			Object obj);

}
MongoDaoImpl.java Dao實現類
package com.guoxin.mongodb.dao.impl;

import org.bson.Document;

import com.guoxin.mongodb.dao.MongoDao;
import com.guoxin.mongodb.utils.MongoUtil;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MapReduceIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.util.JSON;

/**
 * Dao層實現類
 * @author GuoXin
 *
 */
public class MongoDaoImpl implements MongoDao {
	@Override
	public void queryByID(MongoDatabase db, String table,String Id) {
		MongoCollection<Document> collection = db.getCollection(table);
		BasicDBObject query = new BasicDBObject("id", Id);
		FindIterable<Document> iterable = collection.find(query);
		MongoCursor<Document> cursor = iterable.iterator();

		while (cursor.hasNext()) {
			Document user = cursor.next();
			System.out.println(user.toJson());
		}
		cursor.close();
	}

	// test insert

	@Override
	public void insert(MongoDatabase db,String table,Object obj) {
		MongoCollection<Document> collection = db.getCollection(table);
		Document doc = new Document();
		MongoUtil.getInstance().dymParms(doc, obj,"put");
		collection.insertOne(doc);
		FindIterable<Document> iterable = collection.find();
		MongoCursor<Document> cursor = iterable.iterator();
		while (cursor.hasNext()) {
			Document user = cursor.next();
			System.out.println(user.toString());
		}

	}

	@Override
	public void delete(MongoDatabase db,String table,Object obj) {
		MongoCollection<Document> collection = db.getCollection(table);
		BasicDBObject query = new BasicDBObject();
		MongoUtil.getInstance().dymParms(query, obj, "append");
		collection.deleteMany(query);
		FindIterable<Document> iterable = collection.find();
		MongoCursor<Document> cursor = iterable.iterator();
		while (cursor.hasNext()) {
			Document user = cursor.next();
			System.out.println(user.toString());
		}
	}

	
	@Override
	public void update(MongoDatabase db,String table,Object conditions,Object obj) {
		MongoCollection<Document> collection = db.getCollection(table);
		BasicDBObject where = new BasicDBObject();
		MongoUtil.getInstance().dymParms(where, conditions, "append");
		BasicDBObject newContent = new BasicDBObject();
		MongoUtil.getInstance().dymParms(newContent, obj, "append");
		BasicDBObject update = new BasicDBObject("$set",newContent);
		//updateMany updateOne 
		collection.updateMany(where, update);
		FindIterable<Document> iterable = collection.find();
		MongoCursor<Document> cursor = iterable.iterator();
		while (cursor.hasNext()) {
			Document user = cursor.next();
			System.out.println(user.toString());
		}
	}

}