关闭

mongodb java driver3.0初探

标签: mongodbjava
1818人阅读 评论(0) 收藏 举报
分类:

       由于项目中关于地理位置的计算目前采用MySQL以及自定义函数的方案,性能并不好,准备尝试一下mongodb,为了提前做一点知识储备,这几天学习了mongodb的java驱动包。关于mongodb,这里就不做详细介绍了,网上都可以找到。

       下面详细描述一下使用mongodb的过程:

       1、安装mongodb,我的系统win7,因此下载了windows版本,下载地址:https://www.mongodb.org/downloads

       这里需要注意的是,启动前需要手动建立保存数据的目录,mongodb不会自动帮你建立,我采用默认的目录名称C:\data\db,应该是可以修改的,然后启动安装目录bin目录下的mongod.exe

        2、下载mongodb驱动包,下载地址:点击打开链接  我是采用maven管理依赖包,因此很简单,在pom.xml中添加以下代码即可

<dependency>  
    <groupId>org.mongodb</groupId>  
    <artifactId>mongo-java-driver</artifactId>  
    <version>3.0.3</version>  
</dependency>


 

        最新的驱动版本是3.0,关于java操作mongodb网上找了许久,差不多都是<3.0版本的代码,老版本与新版本差别还是挺大的,许多老版本的方法已经Deprecated,因此只有从官方网站学习操作mongodb的方法

        3、新建java工程。

        直接上代码:

public class MongoService {
	
	private static MongoClientOptions options;
	
	static{
	    MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		//与数据最大连接数50
		build.connectionsPerHost(50);
		//如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		build.connectTimeout(1*60*1000);
		build.maxWaitTime(2*60*1000);
		options = build.build();	
	}
	
	public void insertOneDocument(){
		
		MongoClient client = new MongoClient("127.0.0.1", options);
	        //获取数据库test,不存在的话,会自动建立该数据库
		MongoDatabase db = client.getDatabase("test");
	        //获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
	        MongoCollection<Document> users = db.getCollection("data");
		Document document = new Document();
		document.append("firstName", "lei");
		document.append("address", "sichuan chengdu");
		users.insertOne(document);
		//MongoClient使用完后必须要close释放资源
		 client.close();
		
	}}


 

 

       以上代码结合注释还是挺简单的,一看便知,运行后,可以通过mongodb的图形化工具查看插入的数据结果

       关于图形化工具这里我推荐MongoVUE,这款工具需要付费,不过也有破解版,附件可以获得安装包,是破解了的,找了很多这类工具,还是感觉MongoVUE好用一些。

对上面代码稍微解释一下,MongoClient实际上是mongodb的连接池,在应用中我们只需要一个实例就可以了,关于这个连接池的设置,可以使用MongoClientOptions.Builder

具体需要设置的一些参数可以参考该类中的属性,其他查询,修改,删除操作可以查看MongoCollection类的方法


更多时候,我们可能需要用到自定义的MODEL对象,保存到数据库或者从数据库查询,这时可以通过MongoCollection的重载方法操作,如下:

MongoCollection<User> users = db.getCollection("data",User.class);  
User u = new User();  
u.setName("lhc");  
u.setAge(100000);  
users.insertOne(u); 


 

        这种使用方式必须满足两个条件:
  • 一个User的编解码类实现Codec接口,并且在MongoCollectionCodecRegistry注册
  • 这个编解码对象可以编解码全部bson文档

    MongoCollection默认配置了DocumentBasicDBObjectBsonDocument的Codec,新的CodecRegistry实例可以通过三个级别配置:

  • 在MongoClient中通过MongoClientOptions
  • 在MongoDatabase中通过withCodecRegistry方法
  • 在MongoCollection中通过withCodecRegistry方法

         现在,我们通过实现User类的Codec介绍具体的实现过程,请看下面代码:

package com.zmx.ssm.mongo.service;

import org.bson.BsonReader;
import org.bson.BsonWriter;
import org.bson.codecs.Codec;
import org.bson.codecs.DecoderContext;
import org.bson.codecs.EncoderContext;

import com.zmx.ssm.user.domain.User;

public class UserCodec implements Codec<User>{


	@Override
	public User decode(BsonReader reader, DecoderContext decoderContext) {
		        User user = new User();  
		        reader.readStartDocument();  
		        //_id是插入数据时自动生成的项  
		        reader.readObjectId("_id");
		        user.setId(reader.readInt32("id")); 
		        user.setAccount(reader.readString("account"));  
		        user.setPassword(reader.readString("password"));           
	            reader.readEndDocument();  
		        return user;

	}

	
	@Override
	public void encode(BsonWriter writer, User value, EncoderContext encoderContext) {
		        writer.writeStartDocument(); 
		        writer.writeInt32("id", value.getId());
		        writer.writeString("account", value.getAccount());  
		        writer.writeString("password", value.getPassword());  		      
		        writer.writeEndDocument();  
		
	}

	@Override
	public Class<User> getEncoderClass() {
		
		 return User.class; 
	}



}


 

       然后修改前面的代码:

package com.zmx.ssm.mongo.service;

import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.zmx.ssm.user.domain.User;

/**
 * 
 * @author zhangwenchao
 *
 */
public class MongoService {
	
	private static MongoClientOptions options;
	
	static{
	    MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		//与数据最大连接数50
		build.connectionsPerHost(50);
		//如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		build.connectTimeout(1*60*1000);
		build.maxWaitTime(2*60*1000);
		options = build.build();	
	}
	
	public void insertOneDocument(){
		
		MongoClient client = new MongoClient("127.0.0.1", options);
	    //获取数据库test,不存在的话,会自动建立该数据库
		MongoDatabase db = client.getDatabase("test");
		
	    //获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
	    MongoCollection<Document> users = db.getCollection("data");
		Document document = new Document();
		document.append("firstName", "lei");
		document.append("address", "sichuan chengdu");
		users.insertOne(document);
		//MongoClient使用完后必须要close释放资源
		 client.close();
		
	}
	
	
	public void insertOneDomain(){
		
	    MongoClient client = new MongoClient("127.0.0.1", options);
	    //获取数据库test,不存在的话,会自动建立该数据库
	    MongoDatabase db = client.getDatabase("test");
		
	   CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UserCodec()),MongoClient.getDefaultCodecRegistry());  
		
	    //获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
	    MongoCollection<User> users = db.getCollection("user",User.class).withCodecRegistry(codecRegistry); 
	    User u = new User();  
	    u.setId(12);  
	    u.setAccount("Green");
	    u.setPassword("123456");
	    users.insertOne(u); 
	    //MongoClient使用完后必须要close释放资源
	    client.close();
		
	}
	
	
	public void findOneDomain(){
		
		MongoClient client = new MongoClient("127.0.0.1", options);
	    //获取数据库test,不存在的话,会自动建立该数据库
		MongoDatabase db = client.getDatabase("test");
		
		CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UserCodec()),MongoClient.getDefaultCodecRegistry());  
		
	    //获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoCollection<User> users = db.getCollection("user",User.class).withCodecRegistry(codecRegistry); 
		User u = users.find().first();  
		System.out.println(u.getId()+">>>"+u.getAccount()+">>>"+u.getPassword());  
		//MongoClient使用完后必须要close释放资源  
		client.close(); 

		
	}
	
	
     public static void main(String[] args) {
    	 
    	   MongoService mongoService = new  MongoService();
    	 
    	// mongoService.insertOneDocument();
    	// mongoService.insertOneDomain();
    	   mongoService.findOneDomain();
	}
}


 

       再次执行程序,就会查询出user集合中第一条数据记录 。

 

       在使用编解码功能时,我们可以发现并不是那么方便,有没有更好的实现方式还需要进一步的研究,以上就是使用mongodb最新版本的java驱动的过程。

(最后发现MongoVUE的安装包十多M不能放在附件里,有需要的朋友只有搜索一下了,抱歉)

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Mongodb初探(一):实现对自定义Bean对象的CURD

Mongodb中的Document对象很方便,但对于自定义的Bean对象却不能直接继承Document对象后在集合中执行CURD操作,必须要实现一个Codec编解码类,本文就是研究该编解码类是如何在D...
  • basstal
  • basstal
  • 2015-10-29 13:52
  • 1802

MongoDB:将Json数据直接写入MongoDB的方法

MongoDB中是以Bson数据格式进行存储的,Json字符串没有办法直接写入MongoDB 可以将Json字符串转换成DBObject或者Document,然后写入MongoDB
  • github_36869152
  • github_36869152
  • 2017-04-01 18:01
  • 5667

BSON及mongoDB数据类型

JSON是一种被广泛使用的轻量级的数据交换格式,支持现今绝大多数主流的开发语言。而近几年崛起的mongDB则采用了类JSON的数据格式,在JSON之上进行了丰富和增强,使得mongoDB可以处理及报错...
  • robinson_0612
  • robinson_0612
  • 2016-09-26 11:48
  • 3908

MongoDB Java Driver 3.0

connection数据库为每一个MongoDB数据库连接创建一个队列,一个连接可以保证先后顺序。 MongoClient自带连接池保持多个连接。DB and DBCollection are co...
  • zll00561
  • zll00561
  • 2015-03-18 11:21
  • 1784

mongodb设置数据库用户,权限,java mongodb driver3.0驱动用户验证

一.设置mongodb超级管理员,数据库管理者 1.设置mongodb超级管理员:> use admin switched to db admin > db.createUser({user:'su...
  • cdsn123jian
  • cdsn123jian
  • 2015-10-17 10:22
  • 1983

mongodb-driver 3.0

  • 2015-06-30 16:05
  • 309KB
  • 下载

mongo-java-driver 3.0版本学习例子 根据官网指南写的

官网指南地址 http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/ 例子目录结构 ...
  • bao0682
  • bao0682
  • 2015-07-28 14:29
  • 814

mongodb-java-driver-3.5.0.jar最新驱动包

  • 2017-11-10 15:44
  • 5.42MB
  • 下载

MongoDb java driver 3.4.2

  • 2017-03-07 12:56
  • 5.08MB
  • 下载

MongoDB-JAVA-Driver 3.2版本常用代码全整理(3) - 聚合

MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等...
  • autfish
  • autfish
  • 2016-05-12 12:52
  • 8390
    个人资料
    • 访问:1502826次
    • 积分:17194
    • 等级:
    • 排名:第670名
    • 原创:155篇
    • 转载:913篇
    • 译文:34篇
    • 评论:212条
    文章分类
    最新评论