`

mongodb——java封装(id自增,gridFS)

阅读更多
/**
 * 数据库接口
 * @author thomescai@163.com
 * @version 2011-9-27
 */
public interface MongoService {

	/**
	 * 通过gridFS上传对象
	 * @param obj 目标对象
	 * @param paramsMap 参数map
	 * @return
	 * @throws Exception
	 */
	public  boolean gridFSUpload(Object obj, HashMap<String, Object> paramsMap)
			throws Exception;

	/**
	 * 通过gridFS删除
	 * @param paramsMap 参数map
	 * @return
	 */
	public boolean gridFSDelete(HashMap<String, Object> paramsMap);

	/**
	 * 插入DBObject对象
	 * @param idName 该对象的Id名称
	 * @param dbObject 该对象
	 * @return
	 */
	public DBObject insert(String idName, DBObject dbObject);

	/**
	 * 获取对象
	 * @param dbObject 
	 * @return
	 */
	public DBObject getByObj(DBObject dbObject);
	
	/**
	 * 更新数据
	 * @param query 该数据的对象
	 * @param obj 更新的数据
	 * @return 
	 */
	public Boolean update(DBObject query,DBObject obj);
	
	
	/**
	 * 删除对象
	 * @param obj
	 */
	public void remove(DBObject obj);
}

 

public class MongoServiceImpl implements MongoService {

	private String bucketName;
	private DB db;

	public MongoServiceImpl(String dbName, String bucketName) {
		this.bucketName = bucketName;
		Mongo mongo;
		try {
			mongo = new Mongo("192.168.17.28", 27017);
			this.db = mongo.getDB(dbName);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 通过gridFS上传对象
	 * @param obj 目标对象
	 * @param paramsMap 参数map
	 * @return
	 * @throws Exception
	 */
	@Override
	public synchronized boolean gridFSUpload(Object obj, HashMap<String, Object> paramsMap)
			throws IOException {
		boolean flag = false;

		GridFS gridFS = new GridFS(db, bucketName);
		
		GridFSFile gridFSFile = null;
		if (obj instanceof InputStream) {
			gridFSFile = gridFS.createFile((InputStream) obj);
		} else if (obj instanceof byte[]) {
			gridFSFile = gridFS.createFile((byte[]) obj);
		} else if (obj instanceof File) {
			gridFSFile = gridFS.createFile((File) obj);
		}
		if (gridFSFile != null && paramsMap != null) {
			Iterator iter = paramsMap.entrySet().iterator();
			while (iter.hasNext()) {
				Map.Entry<String, Object> entry = (Entry<String, Object>) iter.next();
				gridFSFile.put(entry.getKey(), entry.getValue());
			}
			gridFSFile.save();
			flag = true;
		}
		return flag;
	}

	/**
	 * 通过gridFS删除
	 * @param paramsMap 参数map
	 * @return
	 */
	@Override
	public synchronized boolean gridFSDelete(HashMap<String, Object> paramsMap) {
		boolean flag = false;
		GridFS gridFS = new GridFS(db, bucketName);
		DBObject query = new BasicDBObject();
		if (paramsMap != null) {
			Iterator iter = paramsMap.entrySet().iterator();
			while (iter.hasNext()) {
				Map.Entry<String, Object> entry = (Entry<String, Object>) iter.next();
				query.put(entry.getKey(), entry.getValue());
			}
		}
		DBObject obj = gridFS.findOne(query);
		if(obj != null){
			gridFS.remove(obj);
			flag = true;
		}
		return flag;
	}

	/**
	 * 插入DBObject对象
	 * @param idName 该对象的Id名称
	 * @param dbObject 该对象
	 * @return
	 */
	@Override
	public synchronized DBObject insert(String idName, DBObject dbObject) {
		Integer id = getAutoIncreaseID(idName);
		dbObject.put(idName, id);
		getCollection().insert(dbObject);
		return dbObject;
	}

	/**
	 * 获取连接
	 * @return 
	 */
	public DBCollection getCollection() {
		return db.getCollection(this.bucketName);
	}

	/**
	 * 根据表名获取连接
	 * @param name 
	 * @return
	 */
	public DBCollection getCollection(String name) {
		return db.getCollection(name);
	}

	/**
	 * 自增Id
	 * @param idName 自增Id名称
	 * @return Id
	 */
	public Integer getAutoIncreaseID(String idName) {
		BasicDBObject query = new BasicDBObject();
		query.put("name", idName);

		BasicDBObject update = new BasicDBObject();
		update.put("$inc", new BasicDBObject("id", 1));

		DBObject dbObject2 = getCollection("inc_ids").findAndModify(query,
				null, null, false, update, true, true);
		
		Integer id = (Integer) dbObject2.get("id");
		return id;
	}
	
	/**
	 * 获取对象
	 * @param dbObject 
	 * @return
	 */
	@Override
	public synchronized DBObject getByObj(DBObject dbObject) {
		return getCollection().findOne(dbObject);
	}
	
	/**
	 * 更新数据
	 * @param query 该数据的对象
	 * @param obj 更新的数据
	 * @return 
	 */
	@Override
	public synchronized Boolean update(DBObject query,DBObject obj) {
		WriteResult rs = getCollection().update(query, obj);
		return (Boolean) rs.getField("updatedExisting");
	}

	

	@Override
	public void remove(DBObject obj) {
		WriteResult result = getCollection().remove(obj);
	}
}

 

public class Test {
	
	public static void main(String[] args) {
		MongoService userDAO = new MongoServiceImpl("account", "test");

		System.out.println("=============insert===============");
		DBObject obj = new BasicDBObject();
		obj.put("name", "aaa");
		obj = userDAO.insert("test_id", obj);

		System.out.println("=============get===============");
		DBObject objGet = new BasicDBObject();
		objGet.put("name", "aaa");
		objGet = userDAO.getByObj(objGet);

		System.out.println("=============set===============");
		DBObject objAdd = new BasicDBObject();
		objAdd.put("age2", "ag2444");

		userDAO.update(obj, new BasicDBObject("$set", objAdd));

		System.out.println("=============集合===============");
		DBObject objArrays = new BasicDBObject();
		objArrays.put("arrays", new BasicDBObject("array1", "111"));

		userDAO.update(obj, new BasicDBObject("$push", objArrays));
		
		
//		userDAO.remove(new BasicDBObject("test_id", 1));
	}
}

 

 

运行结果:

 

表test:

表inc_ids:

说明:

    1.在inc_ids中记录各个表的id。每次执行

 

[html] view plaincopy
  1. DBObject dbObject2 = getCollection("inc_ids").findAndModify(query,  
  2.                 null, null, false, update, true, true);  

 

实现id++。在这里保留了mongodb自带的ObjectId,也可以用test_id直接替换_id。

   2.仅对update做了简单的封装。update还有4种方法:


这4种方法是对db.collection.update( criteria, objNew, upsert, multi )做了扩展。说明如下:
criteria : update的查询条件,类似sql update查询内where后面的
objNew   : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert   : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi    : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

   3.$push,$set等通过BasicDBObject对象的形式实现,如下:

 

[html] view plaincopy
  1. DBObject objAdd = new BasicDBObject();  
  2. objAdd.put("age2", "ag2444");  
  3. userDAO.update(obj, new BasicDBObject("$set", objAdd));  
[html] view plaincopy
  1. userDAO.update(obj, new BasicDBObject("$push", objArrays));  

 

可同样适用在其他的命令。

 

 

 

 

参考资料:

http://hi.baidu.com/farmerluo/blog/item/9a23cb13a819bb2fdd540188.html——《MongoDB update数据语法

 

http://www.kafka0102.com/2011/03/435.html——《理解mongodb的ObjectId》

 

http://blog.csdn.net/thomescai(转载请保留)

分享到:
评论

相关推荐

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...

    mongodb 所需jar包及gridfs java示例代码

    在本主题中,我们将深入探讨MongoDB的Java开发所需jar包以及如何使用GridFS进行文件存储。 首先,MongoDB的Java驱动程序通常包含以下核心jar包: 1. `mongodb-driver.jar`:这是与MongoDB服务器通信的基础库,包含...

    java针对mongo操作的封装,完全面向对象,无需修改,可直接使用

    完全面向对象的mongo封装,maven工程源码,可直接install导出jar包引用,支持基本的增删改查和分页等,使用反射对javaBean实体进行映射,所有方法参数只需要传javaBean就行了,支持带密码连接,即拿即用,无需修改。

    从MySQL到MongoDB——视觉中国的NoSQL之路.pdf

    "从MySQL到MongoDB——视觉中国的NoSQL之路" MySQL中的挑战 在传统的基于静态内容的产品中,MySQL使用Master+Master的部署方案,前端使用自己的PHP框架进行开发,Memcached作为缓存,Nginx进行Web服务器和负载...

    mongodb_java_2.6_API

    本篇将深入探讨"mongodb_java_2.6_API",即MongoDB 2.6版本的Java驱动程序API,了解如何使用Java进行MongoDB的开发。 1. **MongoDB Java驱动程序概述** MongoDB的Java驱动程序是Java开发者与MongoDB服务器通信的...

    使用java上传MP4文件至mongodb数据库,并下载 源代码

    在IT行业中,数据库存储是关键任务之一...总之,通过Java和MongoDB的GridFS,我们可以便捷地处理MP4等大文件的上传和下载。这使得MongoDB成为存储多媒体数据的理想选择,特别是在需要快速读取和检索这些数据的应用中。

    mongodb-java-driver-4.4.0.jar

    mongodb-java-driver-4.4.0.jar

    MongoDB.GridFS.dll

    MongoDB.GridFS.dll c#类库...............................................

    java-mongodb底层封装

    以下是关于"java-mongodb底层封装"这一主题的详细知识点: 1. **MongoDB基础知识**: - MongoDB是一个基于分布式文件存储的开源数据库系统,支持多种数据模型,如文档型、集合型和图形数据库。 - 文档数据库:...

    MongoDB for Java Developers

    MongoDB for Java Developers Design, build, and deliver efficient Java applications using the most advanced NoSQL database

    mongoDB DAO层封装

    在MongoDB DAO层封装中,这些操作被封装成易于使用的API,例如,通过`save()`方法创建或更新文档,`findAll()`方法获取所有文档,`findById()`方法根据ID读取文档,以及`deleteById()`方法删除指定ID的文档。...

    MongoDB、Java与对象关系映射

    ### MongoDB、Java与对象关系映射 #### MongoDB简介与特性 MongoDB作为一种强大的NoSQL数据库,在处理非结构化数据方面有着显著的优势。它通过使用JSON(JavaScript Object Notation)格式来存储和检索数据,简化...

    MongoDBjava各版本驱动下载

    MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    Mongodb自增id实现方法

    而在 MongoDB 中,由于其非关系型的特性,自增ID的实现方式与传统SQL数据库略有不同。本文将详细介绍如何在 MongoDB 中实现自增ID。 首先,我们需要创建一个专门用来存储自增ID的集合,例如 `ids`。在这个集合中,...

    mongodb_java_driver

    mongodb_java_driver 已经验证可用!

    Mongodb与GridFS

    NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/2195646

    MongoDB 在java中的应用 纯Java操作

    ### MongoDB在Java中的应用 #### 一、MongoDB简介与安装步骤 MongoDB是一种非常流行的NoSQL数据库系统,尤其适用于需要处理非结构化或半结构化数据的应用场景。其灵活性和扩展性使得它成为众多开发者的首选。在...

Global site tag (gtag.js) - Google Analytics