使用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
在线APIhttp://api.mongodb.org/java/index.html
我们现在用的是2.7.3这个版本的jar包,对应的API地址是http://api.mongodb.org/java/2.7.3/

实现MongoDBCRUD操作的完整源码
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;
/**
 * 功能:实现MongoDBCRUD操作
 * 提示:在这里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(六):固定集合

相关问答

更多