MongoDB在java下的CURD

这个是 mongodb-driver-3.4.2 是最新的 mongodb 的java支持 包

官网 :

如果是手动导包 而不是用 maven 或者grandle构建的话 还需要导入两个jar包 bson-3.4.2.jar 和 mongodb-driver-core-3.4.2.jar

mongodb 是文档型的数据库 存入的结构类似json 它是叫作 bson 这个版本的对于数据的增删改查方法又有新的变化 都是在官方文档上可以找到的

上代码:

package com.mongodb.test;

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

import java.lang.reflect.Field;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.google.gson.Gson;
import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Updates;

public class TestMongo2 {
	private long startTime;
	private MongoClient mongo = null;
	private MongoCollection<Document> collection = null;
	private String[] names = { "周杰伦", "周星驰", "大肥牛", "北京烤鸭", "辜*圆大帅比" };
	private String[] names2 = { "方大同", "周李波", "天使", "美女", "超级大帅比" };
	private Gson gson = new Gson();
	Block<Document> printBlock = new Block<Document>() {
		@Override
		public void apply(final Document document) {
			System.out.println(document.toJson());
		}
	};

	public static Map<String, Object> objectToMap(Object obj) throws Exception {
		if (obj == null) {
			return null;
		}

		Map<String, Object> map = new HashMap<String, Object>();

		Field[] declaredFields = obj.getClass().getDeclaredFields();
		for (Field field : declaredFields) {
			field.setAccessible(true);
			map.put(field.getName(), field.get(obj));
		}

		return map;
	}

	@Before
	public void begin() throws UnknownHostException {
		System.out.println("===========start the game========");
		startTime = System.currentTimeMillis();
		mongo = new MongoClient("localhost", 27017);
		// 连接名为gzydb的数据库,假如数据库不存在的话,mongodb会自动建立
		MongoDatabase db = mongo.getDatabase("gzydb");
		// 从Mongodb中获得名为bill的数据集合,如果该数据集合不存在,Mongodb会为其新建立
		collection = db.getCollection("bill");
	}

	@Test
	public void getCount() {
		System.out.println("总数为:" + collection.count());
	}

	@Test
	public void insertManyTest() {
		System.out.println("开始插入");
		ArrayList<Document> arrayList = new ArrayList<Document>();
		// for (int i = 0; i < 100000000; i++) {
		for (int i = 0; i < 5000; i++) {
			String billParty = names[(int) (Math.random() * 5)];
			String seller = names2[(int) (Math.random() * 5)];
			Bill bill = new Bill(i + "123456", UUID.randomUUID().toString(), billParty, seller, "什么鬼", new Date());
			Document doc = null;
			try {
				// doc=Document.parse(gson.toJson(bill));
				doc = new Document(objectToMap(bill));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			arrayList.add(doc);
		}
		collection.insertMany(arrayList);
		System.out.println("结束插入");
	}

	@Test
	public void insertManyOneByOneTest() {
		System.out.println("开始插入,咱们一条一条慢慢插");
		for (int i = 0; i < 100000000; i++) {
			// for (int i = 0; i < 5000; i++) {
			String billParty = names[(int) (Math.random() * 5)];
			String seller = names2[(int) (Math.random() * 5)];
			Bill bill = new Bill(i + "123456", UUID.randomUUID().toString(), billParty, seller, "什么鬼", new Date());
			Document doc = null;
			try {
				doc = new Document(objectToMap(bill));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			collection.insertOne(doc);
		}
		System.out.println("结束插入");
	}

	@Test
	public void insertOneTest() {
		String billParty = names[(int) (Math.random() * 5)];
		String seller = names2[(int) (Math.random() * 5)];
		Bill bill = new Bill("dd123456", UUID.randomUUID().toString(), billParty, seller, "什么鬼", new Date());
		Document doc = null;
		try {
			doc = new Document(objectToMap(bill));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		collection.insertOne(doc);

	}

	@Test
	public void updateOneTest() {
		System.out.println("开始更新一条");
		// 就修改一条
		collection.updateOne(eq("ivoiceNumber", "dd123456"), Updates.set("financial", "修改了金融"));
		System.out.println("结束更新");

	}

	@Test
	// 查询的结果装进对象里
	public void findTest() {
		System.out.println("开始查询");
		// collection.find().forEach(printBlock);
		FindIterable<Document> doc = collection.find();
		List<Bill> bl = new ArrayList<Bill>();
		for (Document document : doc) {
			bl.add(gson.fromJson(document.toJson(), Bill.class));
		}
		for (Bill bill : bl) {
			System.out.println(gson.toJson(bill));
		}
		System.out.println("总数为" + collection.count());
	}

	@Test
	public void findByTwoOptions() {
		System.out.println("根据两个条件进行查询");
		FindIterable<Document> find = collection
				.find(and(eq("ivoiceNumber", "4999123456"), eq("ivoiceCode", "6b1601d1-f68e-46c0-af92-3a1654c01b02")));
		System.out.println(find.first());

	}

	@Test
	public void findMany() {
		System.out.println("根据一个条件进行查询");
		FindIterable<Document> find = collection.find(eq("seller", "方大同"));
		find.forEach(printBlock);
		// System.out.println(collection.count(eq("seller","方大同")));

	}

	@Test
	public void deleteOneTest() {
		System.out.println("删除一条:");
		collection.deleteOne(eq("ivoiceNumber", "dd123456"));
	}

	@Test
	public void deleteAllTest() {
		System.out.println("删除所有(只要存在指定字段):");
		collection.deleteMany(exists("seller"));
	}

	@After
	public void out() {
		if (mongo != null) {
			mongo.close();
		}
		System.out.println("耗时为:" + (System.currentTimeMillis() - startTime));
	}

}
//对应的实体类:
package com.mongodb.test;

import java.util.Date;

import org.bson.Document;

public class Bill extends Document {
	private String ivoiceNumber;
	private String ivoiceCode;
	private String billParty;// 开票方
	private String seller;// 销售方
	private String financial;
	private Date billTime;

	public String getIvoiceNumber() {
		return ivoiceNumber;
	}

	public void setIvoiceNumber(String ivoiceNumber) {
		this.ivoiceNumber = ivoiceNumber;
	}

	public String getIvoiceCode() {
		return ivoiceCode;
	}

	public Bill() {

	}

	public Bill(String ivoiceNumber, String ivoiceCode, String billParty, String seller, String financial, Date date) {
		super();
		this.ivoiceNumber = ivoiceNumber;
		this.ivoiceCode = ivoiceCode;
		this.billParty = billParty;
		this.seller = seller;
		this.financial = financial;
		this.billTime = date;
	}

	public void setIvoiceCode(String ivoiceCode) {
		this.ivoiceCode = ivoiceCode;
	}

	public String getBillParty() {
		return billParty;
	}

	public void setBillParty(String billParty) {
		this.billParty = billParty;
	}

	public String getSeller() {
		return seller;
	}

	public void setSeller(String seller) {
		this.seller = seller;
	}

	public String getFinancial() {
		return financial;
	}

	public void setFinancial(String financial) {
		this.financial = financial;
	}

	public Date getBillTime() {
		return billTime;
	}

	public void setBillTime(Date billTime) {
		this.billTime = billTime;
	}
}

转载于:https://my.oschina.net/xlpapapa/blog/919607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值