zoukankan      html  css  js  c++  java
  • moogdb操作

    本文转载自 https://my.oschina.net/kakakaka/blog/347954 

    首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。

    mongdb版本为2.4.9

    在项目中导入该驱动包。

    打开shell,在终端输入mongo,显示如下

    只有默认的三个数据库。

    新建一个java project

    代码如下,

    1.操控mongdb连接,使用MongoOptions来设置一些参数。

    package Util;
    
    import java.net.UnknownHostException;
    
    import com.mongodb.DB;
    import com.mongodb.Mongo;
    import com.mongodb.MongoOptions;
    
    
    //数据库工具类
    public class MongoDBUtil {
        private static Mongo mongo = null;
        
        private static String DBString = "MongoDBTest";//数据库名
        private static String hostName = "localhost";//主机名
        private static int port = 27017;//端口号
        private static int poolSize = 10;//连接池大小
        
        private MongoDBUtil(){
            
        }
        
        //获取数据库连接
        public static DB getDB(){
            if(mongo == null){
                init();
            }
            
            return mongo.getDB(DBString);
        }
        
        
        //初始化数据库
        private static void init(){
            try {
                //实例化Mongo
                mongo = new Mongo(hostName, port);
                MongoOptions opt = mongo.getMongoOptions();
                //设置连接池大小
                opt.connectionsPerHost = poolSize;
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    2.基本操作接口

    package DAO;
    
    import java.util.List;
    
    import com.mongodb.BasicDBObject;
    
    
    
    //数据库CRUD基本操作
    public interface BaseDAO {
        public boolean insert(String collectionName, BasicDBObject bean);
        
        public boolean delete(String collectionName, BasicDBObject bean);
        
        public List find(String collectionName, BasicDBObject bean);
        
        public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean);
        
        
    }

    3.基本操作实现

    package DAO.Impl;
    
    import java.util.List;
    
    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    
    import Util.MongoDBUtil;
    import DAO.BaseDAO;
    
    //数据库基本操作实现
    public class BaseDAOImpl implements BaseDAO {
    
        @Override
        public boolean insert(String collectionName, BasicDBObject bean) {
            DB db = MongoDBUtil.getDB();
            db.getCollection(collectionName).insert(bean);
            return false;
        }
    
        @Override
        public boolean delete(String collectionName, BasicDBObject bean) {
            DB db = MongoDBUtil.getDB();
            db.getCollection(collectionName).remove(bean);
            return false;
        }
    
        @Override
        public List find(String collectionName, BasicDBObject bean) {
            DB db = MongoDBUtil.getDB();
            List list = db.getCollection(collectionName).find(bean).toArray();
            return list ;
        }
    
        @Override
        public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean) {
            DB db = MongoDBUtil.getDB();
            db.getCollection(collectionName).update(oldBean, newBean);
            return false;
        }
    
    }

    4.基本操作测试

    4.1添加文档操作

            BaseDAOImpl baseDAOImpl = new BaseDAOImpl();
            BasicDBObject beanOne = new BasicDBObject();
            beanOne.put("name", "kakakaka");
            beanOne.put("sex", "男");
            beanOne.put("age", 20);
            baseDAOImpl.insert("test", beanOne);

    执行后结果

    可以看到mongdb会自动检测是否存在数据库MongoDBTest,如果不存在则新建一个,然后再检测是否存在文档集合test,如果不存在则新建一个,最后插入数据。

    4.2查询文档操作     

            List<BasicDBObject> list = baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka"));
            for(BasicDBObject i : list){
                System.out.println(i.get("name"));
                System.out.println(i.get("sex"));
                System.out.println(i.get("age"));
            }

    输出结果如下

    kakakaka
    男
    20

    4.3修改文档操作如下

            BasicDBObject oldBean = (BasicDBObject) baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka")).get(0);
            BasicDBObject newBean = (BasicDBObject) oldBean.clone();
            newBean.put("name", "gugugugu");
            System.out.println(oldBean.get("name"));
            System.out.println(newBean.get("name"));
            baseDAOImpl.update("test", oldBean, newBean);

    控制台输出结果

    kakakaka
    gugugugu

    4.4删除文档

    先再向数据库插入一条数据

    注意,mongdb区分一个文档中的不同数据是依赖它自己向每条数据中赋的"_id"

    所以再插入这样一条数据

            BaseDAOImpl baseDAOImpl = new BaseDAOImpl();
            BasicDBObject beanOne = new BasicDBObject();
            beanOne.put("name", "gugugugu");
            beanOne.put("sex", "男");
            beanOne.put("age", 20);
            baseDAOImpl.insert("test", beanOne);

    结果如下

    执行删除操作

    首先根据"_id"将文档中第二条数据修改

            baseDAOImpl.update("test", new BasicDBObject("_id", new ObjectId("5471c9db44aeeb8b5524f2ea"))
                                                                        , new BasicDBObject("name","kakakaka").append("age", 20));

    结果如下

    将"name" 等于 "kakakaka"的数据删除

            baseDAOImpl.delete("test", new BasicDBObject("name","kakakaka"));

    5.模糊搜索

    使用正则表达式根据关键字key对数据库相应属性进行模糊搜索,

            String key = "a";
            Pattern pattern = Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE);
            DB db = MongoDBUtil.getDB();
            List list =  db.getCollection("test").find(new BasicDBObject("name", pattern)).toArray();
            for(int i = 0; i < list.size();i++){
                System.out.println(list.get(i));
            }

    数据库内部的内容

    输出结果

    "_id" : { "$oid" : "547ebfc744aefdcc5fe90bce"} , "name" : "kakakaka" , "sex" : "男" , "age" : 20}
  • 相关阅读:
    【转】线程的7种状态及相互转换
    java timer 使用:
    LayoutInflater
    java中Thread与Runnable的区别
    php上传程序到服务器后出错smarty1259
    cakephp ajax
    纯真IP数据库的应用IP地址转化成十进制
    对数组里的元素进行排序
    smarty中的cache_id问题
    箴言
  • 原文地址:https://www.cnblogs.com/yangyang2018/p/10318741.html
Copyright © 2011-2022 走看看