mongodb实践总结(2)-java driver开发实践
1、mongodb java driver下载
?
??你可以到mongodb官网下载jar包,如果你使用maven管理工程,可以通过以下代码依赖:
?
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.8.0</version></dependency>
?
?
2、mongodb java driver驱动不支持事务
?
?? ? ? javaq驱动不支持事务,但可以设置多个写操作在同一次提交中
?? ? ? ?db.requestStart();
/*你的业务代码*/db.requestDone()?
?
?
3、mongodb java driver安全连接问题
?
?? 如果你的mongodb连接时需要安全验证,那么在java代码里需要写上
?
?
??? DB db = mongo.getDB(dbname);
if(!db.isAuthenticated()){db.authenticate("username", "password");} ????if(!db.isAuthenticated()){} 判断一定要加上,否则可能会抛异常,重复验证!
4、Mongodb连接池管理
?
?? ? ? mongodb java驱动已经默认实现了一个连接池,java 驱动入口是Mongo类,在整个系统中,这个类建议只有一个实例,即系统只有一个连接池,这个和普通的数据库一样。
?
?
package com.ldl.mongodb;import java.io.IOException;import java.net.UnknownHostException;import java.util.Properties;import com.mongodb.DB;import com.mongodb.Mongo;import com.mongodb.MongoException;import com.mongodb.MongoURI;/** * mongodb数据库连接管理类 * @author liu400liu * */public class MongodbManager {private static MongodbManager dbManager = new MongodbManager();private static MongoURI mongoURI;private static Mongo mongo ;static{Properties properties = new Properties();try {properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));} catch (IOException e) {throw new RuntimeException(e);}String uri = "mongodb://${mongo.username}:${mongo.password}@${mongo.url}";uri = uri.replace("${mongo.url}", properties.getProperty("mongo.url"));if("1".equals(properties.getProperty("mongo.auth"))){//连接mongodb数据库是否需要权限1:需要,0不需要uri = uri.replace("${mongo.username}", properties.getProperty("mongo.username")) .replace("${mongo.password}", properties.getProperty("mongo.password"));}else{uri = uri.replace("${mongo.username}:${mongo.password}@", "");}mongoURI = new MongoURI(uri);try {mongo = new Mongo(mongoURI);} catch (MongoException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();}}private MongodbManager() {}public static MongodbManager getInstance(){return dbManager;}//根据数据库名称,获取DBpublic DB getDB(String dbname) throws MongoException, UnknownHostException{DB db = mongo.getDB(dbname);if(mongoURI.getUsername() != null && !db.isAuthenticated()){db.authenticate(mongoURI.getUsername(), mongoURI.getPassword());}//db.requestStart();return db;}public DB getDB() throws MongoException, UnknownHostException{return getDB(mongoURI.getDatabase());}/*public static void main(String[] args) throws MongoException, UnknownHostException {DB db = DbManager.getInstance().getDB("test");System.out.println(db.getCollection("blog").findOne().toString());}*/}?5、mongodb数据库日期字段使用时注意事项
?
?? ? ?在做mongodb查询时,我用日期作为过滤字段,发现一个问题,格式化后的日期传入mongodb会抛异常。比如
?
?
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = dateFormat.parse("2012-12-25 00:00:00");??? 如果你把date变量作为参数传给mongodb,mongodb会抛异常,这个可能与java驱动有关,所有这里要再转换一下,可以这样处理:
?
date = new Date(date.getTime())
?
?
?
??总结,mongodb java驱动使用入手还是比较简单的,不过聚合函数在使用时不太方便。
?
?
?
?
?