知识点
软件工具
相关文章
更多最近更新
更多使用Java操作MongoDB_深入浅出MongoDB(五)
2019-03-14 13:04|来源: 领悟书生
先来了解几个类,我用最通俗的话来说,也许不太正确,但容易理解一些:
com.mongodb.Mongo:相当于一个客户端,不过这个客户端对象是放在JVM中。
com.mongodb.DB:数据库
com.mongodb.DBCollection:集合
com.mongodb.DBObject:相当于文档,是一个接口,其继承org.bson.BSONObject接口,一般是通过实例化子类com.mongodb.BasicDBObject.BasicDBObject()来创建DBObject对象
创建一个Mongo对象:
Mongo mg = new Mongo(URL, PORT);
也可以new Mongo();些时默认是连接当前机器的localhost地址,端口是27017。
获取数据库连接:
DB db = mg.getDB(DB);
获取集合对象:
DBCollection conn = db.getCollection(connName);
返回集合中所有的文档:
List list = conn.find(dbObject).toArray();
返回集合中一条文档:
DBObject result = conn.findOne(dbObject);
增加数据
result=conn.insert(dbObject).getN();
修改数据
result= conn.update(where, value).getN();
删除数据
result= conn.remove(dbObject).getN();
官方资料:http://www.mongodb.org/display/DOCS/Java+Language+Center
所需求下载的jar包:
https://github.com/mongodb/mongo-java-driver/downloads
我下载的是mongo-2.7.3.jar
官方JavaTutorial
http://www.mongodb.org/display/DOCS/Java+Tutorial
在线API:http://api.mongodb.org/java/index.html
我们现在用的是2.7.3这个版本的jar包,对应的API地址是http://api.mongodb.org/java/2.7.3/
实现MongoDB的CRUD操作的完整源码
Student实体类:
package com.naxsu.mongodb;
publicclassStudent {
private Object _id;
private String name;
private String age;
//set get method
@Override
public String toString() {
return"Student [_id="+ _id+ ", name="+ name+ ", age="+ age+ "]";
}
}
package com.naxsu.mongodb;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
/**
* 功能:实现MongoDB的CRUD操作
* 提示:在这里DB理解为数据库;DBCollection是集合,可以理解为表
*/
publicclassMongoDBUtil{
privatestaticfinal String URL="192.168.121.128";//连接地址
privatestaticfinalintPORT=27017;//连接端口
privatestaticfinal String DB="mydb";//连接数据库
privatestatic Mongo mg = null;
privatestatic DB db=null;
private DBCollection conn=null;
/**
* 使用单例模式获取DB对象,
* @return DB对象
*/
privatestaticsynchronized DB getDb(){
try {
if(db==null){
//创建Mongo对象
mg = new Mongo(URL, PORT);
//获取 DB;如果默认没有创建,mongodb会自动创建
db = mg.getDB(DB);
}
}catch(Exception e) {
e.printStackTrace();
}
returndb;
}
/**
* 功能:根据集合的名称获取集合对象
* @param connName 集合名称
* @return集合连接对象
*/
publicstatic DBCollectiongetConn(String connName){
getDb();
returndb.getCollection(connName);
}
/**
* 功能:对象销毁,清除内存
*/
publicvoid destory() {
if (mg != null)
mg.close();
mg = null;
db = null;
conn = null;
System.gc();
}
/**
* 功能:根据Mongo对象条件查询所有数据
* @param dbObject Mongo条件对象
* @param connName 表连接名称
* @param className 获取对象的类名称
* @return
* @throws Exception List 返回集合
*/
public ListfindAll(DBObject dbObject,String connName,String className)throws Exception{
ListresultList=newArrayList();
try {
conn=getConn(connName);
Listlist = conn.find(dbObject).toArray();
for(DBObject dbObj:list){
Objectobj= DB2Bean(dbObj,className);
resultList.add(obj);
}
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return resultList;
}
/**
* 功能:根据自定义对象条件查询所有数据
* @param object 定义条件对象
* @param connName 表连接名称
* @param className 获取对象的类名称
* @return
* @throws Exception List 返回集合
*/
public ListfindAll(Object object,String connName,String className)throws Exception{
ListresultList=newArrayList();
try {
conn=getConn(connName);
Listlist = conn.find(bean2DB(object)).toArray();
for(DBObject dbObj:list){
Objectobj= DB2Bean(dbObj,className);
resultList.add(obj);
}
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return resultList;
}
/**
* 功能:根据Mongo对象查询单个数据
* @param dbObject Mongo条件对象
* @param connName 表连接名称
* @param className 获取对象的类名称
* @return
* @throws Exception Object 返回对象
*/
public Object findOne(DBObjectdbObject,String connName,String className)throws Exception{
Objectobj=null;
try {
conn=getConn(connName);
DBObjectresult = conn.findOne(dbObject);
obj=DB2Bean(result,className);
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return obj;
}
/**
* 功能:根据自定义对象查询单个数据
* @param object 自定义条件对象
* @param connName 表连接名称
* @param className 获取对象的类名称
* @return
* @throws Exception Object 返回对象
*/
public Object findOne(Objectobject,String connName,String className)throws Exception{
Objectobj=null;
try {
conn=getConn(connName);
DBObjectresult = conn.findOne(bean2DB(object));
obj=DB2Bean(result,className);
}catch(Exception e) {
e.printStackTrace();
}finally{
destory();
}
return obj;
}
/**
* 功能:根据条件id查询数据
* @param id 条件id
* @param connName 表连接名称
* @param className 获取对象的类名称
* @return
* @throws Exception Object 返回对象
*/
public Object findOneById(Objectid,String connName,String className)throws Exception{
Objectobj=null;
try {
conn=getConn(connName);
DBObjectdbObject = conn.findOne(new BasicDBObject("_id",id));
obj=DB2Bean(dbObject,className);
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return obj;
}
/**
* 功能:增加数据
* @param obj 要增加对象
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint add(Object obj,StringconnName)throwsException{
int result=-1;
try {
conn=getConn(connName);
DBObjectdbObject = bean2DB(obj);
result=conn.insert(dbObject).getN();
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:增加数据
* @param dbObject 封装对象的数据
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint add(DBObjectdbObject,String connName)throws Exception{
int result=-1;
try {
conn=getConn(connName);
result=conn.insert(dbObject).getN();
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:修改数据
* @param value 修改的数据
* @param where 修改条件
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint update(DBObjectvalue,DBObject where,String connName) throws Exception{
int result=-1;
try {
conn=getConn(connName);
result=conn.update(where,value).getN();
}catch(MongoException e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:修改数据
* @param value 修改的数据
* @param where 修改条件
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint update(Objectvalue,Object where,String connName)throws Exception {
int result=-1;
try {
conn=getConn(connName);
result=conn.update(bean2DB(where),bean2DB(value)).getN();
}catch(MongoException e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:根据条件删除数据
* @param obj 要删除的对象
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint remove(Objectobj,String connName) throws Exception{
int result=-1;
try {
conn=getConn(connName);
result=conn.remove(bean2DB(obj)).getN();
}catch(MongoException e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:根据条件删除数据
* @param dbObject 要删除的数据
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint remove(DBObjectdbObject,String connName)throws Exception {
int result=-1;
try {
conn=getConn(connName);
result=conn.remove(dbObject).getN();
}catch(MongoException e) {
e.printStackTrace();
thrownew Exception();
}finally{
destory();
}
return result;
}
/**
* 功能:根据条件得到数据总和
* @param dbObject 条件对象
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint getCount(DBObjectdbObject,String connName)throws Exception{
int result=0;
try {
conn=getConn(connName);
result=conn.find(dbObject).count();
}catch(Exception e) {
e.printStackTrace();
thrownew Exception();
}
return result;
}
/**
* 功能:根据条件得到数据总和
* @param obj 条件对象
* @param connName 表连接名称
* @return
* @throws Exception int 返回影响结果
*/
publicint getCount(Objectobj,String connName)throws Exception{
int result=0;
try {
conn=getConn(connName);
result=conn.find(bean2DB(obj)).count();
}catch(Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 功能:将自定义对象转换为Mongo对象
* @param obj 自定义对象
* @return DBObject Mongo对象
*/
publicstatic DBObject bean2DB(Objectobj)throwsException{
DBObjectdbObject=newBasicDBObject();
ClassextendsObject> clazz=obj.getClass();
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
StringfieldName=field.getName();
StringmethodName="get"+fieldName.substring(0,1).toUpperCase()+fieldname.substring(1,fieldName.length());
Methodmethod=null;
Object resultObj=null;
try {
method=clazz.getMethod(methodName);
}catch(Exception e) {
e.printStackTrace();
continue;
}
try {
resultObj=method.invoke(obj);
}catch(Exception e) {
continue;
}
if(resultObj!=null&&!resultObj.equals("")){
dbObject.put(fieldName,resultObj);
}
}
return dbObject;
}
/**
* 功能:将Mongo对象转换为自定义对象
* @param dbObject Mongo对象
* @param className 要转换的类名称
* @return
* @throws Exception Object
*/
publicstatic Object DB2Bean(DBObjectdbObject,String className) throws Exception{
Classclazz=Class.forName(className);
Objectobj=clazz.newInstance();
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
StringfieldName=field.getName();
StringmethodName="set"+fieldName.substring(0,1).toUpperCase()+fieldname.substring(1,fieldName.length());
Methodmethod=null;
Object resultObj=null;
try {
method=clazz.getMethod(methodName,newClass[]{field.getType()});
}catch(Exception e) {
e.printStackTrace();
continue;
}
resultObj=dbObject.get(fieldName);
try {
resultObj=method.invoke(obj,new Object[]{resultObj});
}catch(Exception e) {
continue;
}
}
return obj;
}
}
MongoDB测试类:
package com.naxsu.mongodb;
import java.util.List;
import org.junit.Test;
import com.mongodb.DBCollection;
publicclassMongoDBTest {
MongoDBUtilmu = new MongoDBUtil();
@Test
publicvoid getConn() {
DBCollectionconn = mu.getConn("student");
System.out.println(conn.getCount());
}
@Test
publicvoid findAll() {
try {
Studentstu = newStudent();
Listlist = mu.findAll(stu,"student",Student.class.getName());
for (Student result : list){
System.out.println("name="+ result.getName());
System.out.println("age=" +result.getAge());
System.out.println("========================");
}
}catch(Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid findOne() {
try {
Studentstu = newStudent();
stu.setName("naxsu");
Studentresult = (Student) mu.findOne(stu,"student",Student.class.getName());
System.out.println("name="+ result.getName());
System.out.println("age=" +result.getAge());
}catch(Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid add() {
Studentstu = newStudent();
stu.setName("tom");
stu.setAge("24");
try {
System.out.println(mu.add(stu, "student"));
}catch(Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid update() {
try {
Studentwhere = newStudent();
where.setAge("24");
where.setName("tom");
Studentvalue = (Student) mu.findOne(where,"student",where.getClass().getName());
System.out.println(value);
value.setAge("25");
value.setName("joke");
System.out.println(mu.update(value, where, "student"));
}catch(Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid remove() {
try {
Studentwhere = newStudent();
where.setAge("25");
where.setName("joke");
mu.remove(where, "student");
}catch(Exception e) {
e.printStackTrace();
}
}
}
上面实例代码是参考网络,本人有做相应的修改
本文链接:http://www.656463.com/portal.php?mod=view&aid=80,转载请注明出处
下一节:深入浅出MongoDB(六):固定集合
相关问答
更多-
《深入浅出java swing 程序设计》电子书[2022-03-28]
Java 编程初步 傻瓜书 http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=159167 零基础学Java电子教程 附随书光盘 http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=181032 数据结与算法 Java语言版 http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=160250 精通JBuilder 2005 中文版 高清PDF+随书光盘 http:/ ... -
怎么说呢,我觉得你学得太杂乱了,你最好先确定你到你是学c++ java还是C#,这是集中完全不同的东西。不知道你的c++水平怎么样,能不能跳过很难说。 这三本书讲的东西是一样的,都是MFC,而只是难度不一样,《深入浅出MFC》适合入门,建议看看已确定自己的水平。 我也是学计算机的,我的账号就是我的QQ,交流交流吧.
-
深入浅出JAVA怎么样[2022-04-24]
作为业余学习的读者,我是没太多精力和耐心去读那些结构严谨篇章有序的教科书的。 我需要的不是专业老师把一个个概念和知识点抛给我,而是有人能解答我的一个个疑...... -
深入浅出设计模式与深入浅出设计模式C#/java,有什么区别,另外求这两本书的PDF[2022-08-03]
深入浅出设计模式是HeadFirst系列的,写的很好,后面那本就不用看了,垃圾的要死 -
你的mongo视频可以传一份吗 <深入浅出MOngoDB应用实战>[2022-07-23]
可以楼主找我传吧!帮忙采纳下哦 谢谢 祝您生活愉快! -
求《深入浅出extjs》 pdf 第二版[2022-01-06]
书比较新,网上不好找 还是买吧,我都是买的新书。 不过看完这本书的感觉是,它几乎不讲底层源码,如果你想在ExtJS上达到大师级的水平的话,"ExtJs源码分析与实例宝典"似乎不错。我正想买那本书呢。 如果你只是想了解Ext一些常用功能的话,《深入浅出extjs》也凑合