服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - Java操作MongoDB数据库示例分享

Java操作MongoDB数据库示例分享

2020-04-28 14:55MongoDB教程网 MongoDB

MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了MongoDB的基本操作。具体都在备注当中,要仔细看哦

MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了MongoDB的基本操作。

MongoDBConfig.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.posoftframework.mongodb;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import com.mongodb.DB;
import com.mongodb.Mongo;
/**
 * MongoDB配置类
 *
 * @author yongtree
 * @date 2010-7-7 下午07:45:08
 * @version 1.0
 */
public class MongoDBConfig {
  private static Mongo mongo;
  private static DB db;
  private static final String MONGO_DB_ADDRESS = "localhost";
  private static final int MONGO_DB_PORT = 27017;
  private static final String MONGO_DB_USERNAME = "root";
  private static final String MONGO_DB_PASSWORD = "root";
  private static final String MONGO_DB_DBNAME = "mongodb";
  private static final String MONGO_DB_RESOURCE_FILE = "mongodb.cfg.properties";
  /**
   * Mongo数据库参数
   */
  private static Map<String, String> cfgMap = new HashMap<String, String>();
  private static Hashtable<String, DB> mongoDBs = new Hashtable<String, DB>();
  /**
   * 初始化Mongo的数据库
   */
  static {
    init();
  }
  public static File getConfigFile() {
    String path = MongoDBConfig.class.getResource("/").getPath();
    String fileName = path + MONGO_DB_RESOURCE_FILE;
    File file = new File(fileName);
    if (file.exists()) {
      return file;
    }
    return null;
  }
  @SuppressWarnings("unchecked")
  private static void initCfgMap() {
    File file = getConfigFile();
    if (file != null) {
      Properties p = new Properties();
      try {
        p.load(new FileInputStream(file));
        for (Enumeration enu = p.propertyNames(); enu.hasMoreElements();) {
          String key = (String) enu.nextElement();
          String value = (String) p.getProperty(key);
          cfgMap.put(key, value);
        }
      } catch (IOException e) {
        System.out.println("记载Mongo配置文件失败!");
        e.printStackTrace();
      }
    } else {
      cfgMap.put("mongo.db.address", MONGO_DB_ADDRESS);
      cfgMap.put("mongo.db.port", String.valueOf(MONGO_DB_PORT));
      cfgMap.put("mongo.db.username", MONGO_DB_USERNAME);
      cfgMap.put("mongo.db.password", MONGO_DB_PASSWORD);
      cfgMap.put("mongo.db.dbname", MONGO_DB_DBNAME);
    }
  }
  /**
   * 初始化Mongo数据库
   */
  private static void init() {
    initCfgMap();
    try {
      String address = cfgMap.get("mongo.db.address");
      int port = Integer.parseInt(cfgMap.get("mongo.db.port").toString());
      String dbName = cfgMap.get("mongo.db.dbname");
      String username = cfgMap.get("mongo.db.username");
      String password = cfgMap.get("mongo.db.password");
      mongo = new Mongo(address, port);
      if (dbName != null && !"".equals(dbName)) {
        db = mongo.getDB(dbName);
        if (username != null && !"".equals(username)) {
          db.addUser(username, password.toCharArray());
        }
        mongoDBs.put(dbName, db);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   * 得到Mongo的实例
   *
   * @return
   */
  public static Mongo getMongo() {
    return mongo;
  }
  /**
   * 得到Mongo的图片数据库
   *
   * @return
   */
  public static DB getDB() {
    return db;
  }
  public static List<String> getDBNames() {
    return mongo.getDatabaseNames();
  }
  /**
   * 根据数据库名称,得到数据库<br/>
   * 如果不存在,则创建一个该名称的数据库,并设置用户名和密码为配置文件中的参数值</br>
   *
   * @param dbName
   * @return
   */
  public static DB getDBByName(String dbName) {
    DB db = mongo.getDB(dbName);
    if (!mongoDBs.contains(db)) {
      db.addUser(cfgMap.get("mongo.db.username"), cfgMap.get(
          "mongo.db.password").toCharArray());
      mongoDBs.put(dbName, db);
    }
    return db;
  }
}

MongoService.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/************************* 版权声明 *********************************
 *                                                               *
 *           版权所有:百洋软件                                                    *
 *     Copyright (c) 2010 by www.po-soft.com                        *
 *                                                               *
 ************************* 变更记录 *********************************
 *
 * 创建者:yongtree  创建日期: 2010-7-7
 * 备注:
 *
 * 修改者:    修改日期:
 * 备注:
 *
 */
package com.posoftframework.mongodb;
import java.util.List;
import java.util.Map;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
/**
 * 操作MongoDB的DAO接口
 *
 * @author yongtree
 * @date 2010-7-7 下午04:44:43
 * @version 1.0
 */
public interface MongoService {
  public abstract DBCollection getCollection();
  /**
   * 根据数据集合的Map,插入数据 map的key对应数据库中的DBCollection的key值
   *
   * @param obj
   */
  public abstract DBObject insert(DBObject obj);
  /**
   * 根据List<Map<String,Object>>结构的数据集合,插入数据
   *
   * @param list
   */
  public abstract void insertBatch(List<DBObject> list);
  /**
   * 按照条件参数集合map,删除数据
   *
   * @param map
   */
  public abstract void delete(DBObject obj);
  /**
   * 按照多种条件的并集,批量删除数据
   *
   * @param list
   */
  public abstract void deleteBatch(List<DBObject> list);
  /**
   * 得到Collection()总的记录数
   *
   * @return
   */
  public abstract long getCollectionCount();
  public abstract long getCount(DBObject query);
  public abstract List<DBObject> find(DBObject query);
  public abstract List<DBObject> find(DBObject query,DBObject sort);
  public abstract List<DBObject> find(DBObject query,DBObject sort,int start,int limit);
  /**
   * 根据whereFields参数,更新setFields值
   *
   * @param setFields
   * @param whereFields
   */
  public abstract void update(DBObject setFields,
      DBObject whereFields);
  public abstract List<DBObject> findAll();
  /**
   * 根据ID找到唯一数据 有1个id字段标记
   *
   * @param id
   * @return
   */
  public abstract DBObject getById(String id);
  /**
   * 获取所有数据库名称
   *
   * @return
   */
  public List<String> getAllDBNames();
  public abstract String getDbName();
  public abstract void setDbName(String dbName);
  public abstract DB getDb();
  public abstract String getCollName();
  public abstract void setCollName(String collName);
}

MongoServiceImpl.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/************************* 版权声明 *********************************
 *                                                               *
 *           版权所有:百洋软件                                                    *
 *     Copyright (c) 2010 by www.po-soft.com                        *
 *                                                               *
 ************************* 变更记录 *********************************
 *
 * 创建者:yongtree  创建日期: 2010-7-7
 * 备注:
 *
 * 修改者:    修改日期:
 * 备注:
 *
 */
package com.posoftframework.mongodb;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
/**
 *
 * @author yongtree
 * @date 2010-7-7 下午07:22:15
 * @version 1.0
 */
public class MongoServiceImpl implements MongoService {
  private String dbName;
  private String collName;
  private DB db;
  public MongoServiceImpl(String dbName, String collName) {
    this.dbName = dbName;
    this.collName = collName;
    try {
      db = MongoDBConfig.getDBByName(this.dbName);
    } catch (Throwable e) {
      e.printStackTrace();
    }
  }
  public MongoServiceImpl() {
    getDb();
  }
  public DBCollection getCollection() {
    return db.getCollection(this.collName);
  }
  public DBObject map2Obj(Map<String, Object> map) {
    DBObject obj = new BasicDBObject();
    if (map.containsKey("class") && map.get("class") instanceof Class)
      map.remove("class");
    obj.putAll(map);
    return obj;
  }
  public DBObject insert(DBObject obj) {
    getCollection().insert(obj);
    return obj;
  }
  public void insertBatch(List<DBObject> list) {
    if (list == null || list.isEmpty()) {
      return;
    }
    List<DBObject> listDB = new ArrayList<DBObject>();
    for (int i = 0; i < list.size(); i++) {
      listDB.add(list.get(i));
    }
    getCollection().insert(listDB);
  }
  public void delete(DBObject obj) {
    getCollection().remove(obj);
  }
  public void deleteBatch(List<DBObject> list) {
    if (list == null || list.isEmpty()) {
      return;
    }
    for (int i = 0; i < list.size(); i++) {
      getCollection().remove(list.get(i));
    }
  }
  public long getCollectionCount() {
    return getCollection().getCount();
  }
  public long getCount(DBObject obj) {
    if (obj != null)
      return getCollection().getCount(obj);
    return getCollectionCount();
  }
  public List<DBObject> find(DBObject obj) {
    DBCursor cur = getCollection().find(obj);
    return DBCursor2list(cur);
  }
  @Override
  public List<DBObject> find(DBObject query, DBObject sort) {
    DBCursor cur;
    if (query != null) {
      cur = getCollection().find(query);
    } else {
      cur = getCollection().find();
    }
    if (sort != null) {
      cur.sort(sort);
    }
    return DBCursor2list(cur);
  }
  @Override
  public List<DBObject> find(DBObject query, DBObject sort, int start,
      int limit) {
    DBCursor cur;
    if (query != null) {
      cur = getCollection().find(query);
    } else {
      cur = getCollection().find();
    }
    if (sort != null) {
      cur.sort(sort);
    }
    if (start == 0) {
      cur.batchSize(limit);
    } else {
      cur.skip(start).limit(limit);
    }
    return DBCursor2list(cur);
  }
  private List<DBObject> DBCursor2list(DBCursor cur) {
    List<DBObject> list = new ArrayList<DBObject>();
    if (cur != null) {
      list = cur.toArray();
    }
    return list;
  }
  public void update(DBObject setFields, DBObject whereFields) {
    getCollection().updateMulti(setFields, whereFields);
  }
  public List<DBObject> findAll() {
    DBCursor cur = getCollection().find();
    List<DBObject> list = new ArrayList<DBObject>();
    if (cur != null) {
      list = cur.toArray();
    }
    return list;
  }
  public DBObject getById(String id) {
    DBObject obj = new BasicDBObject();
    obj.put("_id", new ObjectId(id));
    DBObject result = getCollection().findOne(obj);
    return result;
  }
  public String getDbName() {
    return dbName;
  }
  public void setDbName(String dbName) {
    this.dbName = dbName;
    this.db = MongoDBConfig.getDBByName(this.dbName);
  }
  public String getCollName() {
    return collName;
  }
  public void setCollName(String collName) {
    this.collName = collName;
  }
  public DB getDb() {
    if (this.db == null) {
      if (this.dbName == null) {
        this.db = MongoDBConfig.getDB();
      } else {
        this.db = MongoDBConfig.getDBByName(this.dbName);
      }
    }
    return this.db;
  }
  public List<String> getAllDBNames() {
    return MongoDBConfig.getDBNames();
  }
}

 

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14