java中使用MongoDB的方法

Bertha 。 2022-05-14 20:41 470阅读 0赞

首先引入mongo-java-driver-3.1.0.jar这个jar包。—版本根据自己的项目定,我这里以mongo-java-driver-3.1.0为例;

java项目中使用MongoDB最关键的两个类:

1、MongoClient 类;

  1. package com.mongodb;
  2. import com.mongodb.DBObjectCodec;
  3. import com.mongodb.DBObjectCodecProvider;
  4. import com.mongodb.DBRefCodecProvider;
  5. import com.mongodb.DocumentToDBRefTransformer;
  6. import com.mongodb.Function;
  7. import com.mongodb.ListDatabasesIterableImpl;
  8. import com.mongodb.Mongo;
  9. import com.mongodb.MongoClientOptions;
  10. import com.mongodb.MongoClientURI;
  11. import com.mongodb.MongoCredential;
  12. import com.mongodb.MongoDatabaseImpl;
  13. import com.mongodb.ReadPreference;
  14. import com.mongodb.ServerAddress;
  15. import com.mongodb.MongoClientOptions.Builder;
  16. import com.mongodb.client.ListDatabasesIterable;
  17. import com.mongodb.client.MongoDatabase;
  18. import com.mongodb.client.MongoIterable;
  19. import com.mongodb.client.model.geojson.codecs.GeoJsonCodecProvider;
  20. import java.io.Closeable;
  21. import java.util.Arrays;
  22. import java.util.List;
  23. import org.bson.BsonDocument;
  24. import org.bson.Document;
  25. import org.bson.codecs.BsonValueCodecProvider;
  26. import org.bson.codecs.DocumentCodecProvider;
  27. import org.bson.codecs.ValueCodecProvider;
  28. import org.bson.codecs.configuration.CodecProvider;
  29. import org.bson.codecs.configuration.CodecRegistries;
  30. import org.bson.codecs.configuration.CodecRegistry;
  31. public class MongoClient extends Mongo implements Closeable {
  32. private static final CodecRegistry DEFAULT_CODEC_REGISTRY = CodecRegistries.fromProviders(Arrays.asList(new CodecProvider[]{new ValueCodecProvider(), new DBRefCodecProvider(), new DocumentCodecProvider(new DocumentToDBRefTransformer()), new DBObjectCodecProvider(), new BsonValueCodecProvider(), new GeoJsonCodecProvider()}));
  33. public static CodecRegistry getDefaultCodecRegistry() {
  34. return DEFAULT_CODEC_REGISTRY;
  35. }
  36. public MongoClient() {
  37. this(new ServerAddress());
  38. }
  39. public MongoClient(String host) {
  40. this(new ServerAddress(host));
  41. }
  42. public MongoClient(String host, MongoClientOptions options) {
  43. this(new ServerAddress(host), options);
  44. }
  45. public MongoClient(String host, int port) {
  46. this(new ServerAddress(host, port));
  47. }
  48. public MongoClient(ServerAddress addr) {
  49. this(addr, (new Builder()).build());
  50. }
  51. public MongoClient(ServerAddress addr, List<MongoCredential> credentialsList) {
  52. this(addr, credentialsList, (new Builder()).build());
  53. }
  54. public MongoClient(ServerAddress addr, MongoClientOptions options) {
  55. super(addr, options);
  56. }
  57. public MongoClient(ServerAddress addr, List<MongoCredential> credentialsList, MongoClientOptions options) {
  58. super(addr, credentialsList, options);
  59. }
  60. public MongoClient(List<ServerAddress> seeds) {
  61. this(seeds, (new Builder()).build());
  62. }
  63. public MongoClient(List<ServerAddress> seeds, List<MongoCredential> credentialsList) {
  64. this(seeds, credentialsList, (new Builder()).build());
  65. }
  66. public MongoClient(List<ServerAddress> seeds, MongoClientOptions options) {
  67. super(seeds, options);
  68. }
  69. public MongoClient(List<ServerAddress> seeds, List<MongoCredential> credentialsList, MongoClientOptions options) {
  70. super(seeds, credentialsList, options);
  71. }
  72. public MongoClient(MongoClientURI uri) {
  73. super(uri);
  74. }
  75. public MongoClientOptions getMongoClientOptions() {
  76. return super.getMongoClientOptions();
  77. }
  78. public List<MongoCredential> getCredentialsList() {
  79. return super.getCredentialsList();
  80. }
  81. public MongoIterable<String> listDatabaseNames() {
  82. return (new ListDatabasesIterableImpl(BsonDocument.class, getDefaultCodecRegistry(), ReadPreference.primary(), this.createOperationExecutor())).map(new Function() {
  83. public String apply(BsonDocument result) {
  84. return result.getString("name").getValue();
  85. }
  86. });
  87. }
  88. public ListDatabasesIterable<Document> listDatabases() {
  89. return this.listDatabases(Document.class);
  90. }
  91. public <T> ListDatabasesIterable<T> listDatabases(Class<T> clazz) {
  92. return new ListDatabasesIterableImpl(clazz, this.getMongoClientOptions().getCodecRegistry(), ReadPreference.primary(), this.createOperationExecutor());
  93. }
  94. public MongoDatabase getDatabase(String databaseName) {
  95. MongoClientOptions clientOptions = this.getMongoClientOptions();
  96. return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(), clientOptions.getWriteConcern(), this.createOperationExecutor());
  97. }
  98. static DBObjectCodec getCommandCodec() {
  99. return new DBObjectCodec(getDefaultCodecRegistry());
  100. }
  101. }

2、MongoDatabase接口以及它的实现类;

  1. package com.mongodb.client;
  2. import com.mongodb.ReadPreference;
  3. import com.mongodb.WriteConcern;
  4. import com.mongodb.annotations.ThreadSafe;
  5. import com.mongodb.client.ListCollectionsIterable;
  6. import com.mongodb.client.MongoCollection;
  7. import com.mongodb.client.MongoIterable;
  8. import com.mongodb.client.model.CreateCollectionOptions;
  9. import org.bson.Document;
  10. import org.bson.codecs.configuration.CodecRegistry;
  11. import org.bson.conversions.Bson;
  12. @ThreadSafe
  13. public interface MongoDatabase {
  14. String getName();
  15. CodecRegistry getCodecRegistry();
  16. ReadPreference getReadPreference();
  17. WriteConcern getWriteConcern();
  18. MongoDatabase withCodecRegistry(CodecRegistry var1);
  19. MongoDatabase withReadPreference(ReadPreference var1);
  20. MongoDatabase withWriteConcern(WriteConcern var1);
  21. MongoCollection<Document> getCollection(String var1);
  22. <TDocument> MongoCollection<TDocument> getCollection(String var1, Class<TDocument> var2);
  23. Document runCommand(Bson var1);
  24. Document runCommand(Bson var1, ReadPreference var2);
  25. <TResult> TResult runCommand(Bson var1, Class<TResult> var2);
  26. <TResult> TResult runCommand(Bson var1, ReadPreference var2, Class<TResult> var3);
  27. void drop();
  28. MongoIterable<String> listCollectionNames();
  29. ListCollectionsIterable<Document> listCollections();
  30. <TResult> ListCollectionsIterable<TResult> listCollections(Class<TResult> var1);
  31. void createCollection(String var1);
  32. void createCollection(String var1, CreateCollectionOptions var2);
  33. }

MongoDatabase实现类

  1. package com.mongodb;
  2. import com.mongodb.Function;
  3. import com.mongodb.ListCollectionsIterableImpl;
  4. import com.mongodb.MongoClient;
  5. import com.mongodb.MongoCollectionImpl;
  6. import com.mongodb.MongoNamespace;
  7. import com.mongodb.ReadPreference;
  8. import com.mongodb.WriteConcern;
  9. import com.mongodb.assertions.Assertions;
  10. import com.mongodb.client.ListCollectionsIterable;
  11. import com.mongodb.client.MongoCollection;
  12. import com.mongodb.client.MongoDatabase;
  13. import com.mongodb.client.MongoIterable;
  14. import com.mongodb.client.model.CreateCollectionOptions;
  15. import com.mongodb.operation.CommandReadOperation;
  16. import com.mongodb.operation.CreateCollectionOperation;
  17. import com.mongodb.operation.DropDatabaseOperation;
  18. import com.mongodb.operation.OperationExecutor;
  19. import org.bson.BsonDocument;
  20. import org.bson.Document;
  21. import org.bson.codecs.configuration.CodecRegistry;
  22. import org.bson.conversions.Bson;
  23. class MongoDatabaseImpl implements MongoDatabase {
  24. private final String name;
  25. private final ReadPreference readPreference;
  26. private final CodecRegistry codecRegistry;
  27. private final WriteConcern writeConcern;
  28. private final OperationExecutor executor;
  29. MongoDatabaseImpl(String name, CodecRegistry codecRegistry, ReadPreference readPreference, WriteConcern writeConcern, OperationExecutor executor) {
  30. this.name = (String)Assertions.notNull("name", name);
  31. this.codecRegistry = (CodecRegistry)Assertions.notNull("codecRegistry", codecRegistry);
  32. this.readPreference = (ReadPreference)Assertions.notNull("readPreference", readPreference);
  33. this.writeConcern = (WriteConcern)Assertions.notNull("writeConcern", writeConcern);
  34. this.executor = (OperationExecutor)Assertions.notNull("executor", executor);
  35. }
  36. public String getName() {
  37. return this.name;
  38. }
  39. public CodecRegistry getCodecRegistry() {
  40. return this.codecRegistry;
  41. }
  42. public ReadPreference getReadPreference() {
  43. return this.readPreference;
  44. }
  45. public WriteConcern getWriteConcern() {
  46. return this.writeConcern;
  47. }
  48. public MongoDatabase withCodecRegistry(CodecRegistry codecRegistry) {
  49. return new MongoDatabaseImpl(this.name, codecRegistry, this.readPreference, this.writeConcern, this.executor);
  50. }
  51. public MongoDatabase withReadPreference(ReadPreference readPreference) {
  52. return new MongoDatabaseImpl(this.name, this.codecRegistry, readPreference, this.writeConcern, this.executor);
  53. }
  54. public MongoDatabase withWriteConcern(WriteConcern writeConcern) {
  55. return new MongoDatabaseImpl(this.name, this.codecRegistry, this.readPreference, writeConcern, this.executor);
  56. }
  57. public MongoCollection<Document> getCollection(String collectionName) {
  58. return this.getCollection(collectionName, Document.class);
  59. }
  60. public <TDocument> MongoCollection<TDocument> getCollection(String collectionName, Class<TDocument> documentClass) {
  61. return new MongoCollectionImpl(new MongoNamespace(this.name, collectionName), documentClass, this.codecRegistry, this.readPreference, this.writeConcern, this.executor);
  62. }
  63. public Document runCommand(Bson command) {
  64. return (Document)this.runCommand(command, Document.class);
  65. }
  66. public Document runCommand(Bson command, ReadPreference readPreference) {
  67. return (Document)this.runCommand(command, readPreference, Document.class);
  68. }
  69. public <TResult> TResult runCommand(Bson command, Class<TResult> resultClass) {
  70. return this.runCommand(command, ReadPreference.primary(), resultClass);
  71. }
  72. public <TResult> TResult runCommand(Bson command, ReadPreference readPreference, Class<TResult> resultClass) {
  73. Assertions.notNull("readPreference", readPreference);
  74. return this.executor.execute(new CommandReadOperation(this.getName(), this.toBsonDocument(command), this.codecRegistry.get(resultClass)), readPreference);
  75. }
  76. public void drop() {
  77. this.executor.execute(new DropDatabaseOperation(this.name));
  78. }
  79. public MongoIterable<String> listCollectionNames() {
  80. return (new ListCollectionsIterableImpl(this.name, BsonDocument.class, MongoClient.getDefaultCodecRegistry(), ReadPreference.primary(), this.executor)).map(new Function() {
  81. public String apply(BsonDocument result) {
  82. return result.getString("name").getValue();
  83. }
  84. });
  85. }
  86. public ListCollectionsIterable<Document> listCollections() {
  87. return this.listCollections(Document.class);
  88. }
  89. public <TResult> ListCollectionsIterable<TResult> listCollections(Class<TResult> resultClass) {
  90. return new ListCollectionsIterableImpl(this.name, resultClass, this.codecRegistry, ReadPreference.primary(), this.executor);
  91. }
  92. public void createCollection(String collectionName) {
  93. this.createCollection(collectionName, new CreateCollectionOptions());
  94. }
  95. public void createCollection(String collectionName, CreateCollectionOptions createCollectionOptions) {
  96. this.executor.execute((new CreateCollectionOperation(this.name, collectionName)).capped(createCollectionOptions.isCapped()).sizeInBytes(createCollectionOptions.getSizeInBytes()).autoIndex(createCollectionOptions.isAutoIndex()).maxDocuments(createCollectionOptions.getMaxDocuments()).usePowerOf2Sizes(createCollectionOptions.isUsePowerOf2Sizes()).storageEngineOptions(this.toBsonDocument(createCollectionOptions.getStorageEngineOptions())));
  97. }
  98. private BsonDocument toBsonDocument(Bson document) {
  99. return document == null?null:document.toBsonDocument(BsonDocument.class, this.codecRegistry);
  100. }
  101. }

后面只需要根据项目需求自己 实现就好。如下利用MongoDB做增删改查;

  1. import com.ifunpay.util.function.TryToDo;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.MongoCredential;
  4. import com.mongodb.ServerAddress;
  5. import com.mongodb.client.MongoCollection;
  6. import com.mongodb.client.MongoDatabase;
  7. import lombok.extern.log4j.Log4j;
  8. import org.bson.Document;
  9. import javax.annotation.PreDestroy;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.concurrent.*;
  13. @Log4j
  14. public class MongoConfig {
  15. static String host;
  16. static int port;
  17. static String db;
  18. static String user;
  19. static String password;
  20. static ExecutorService executor;
  21. private static boolean isLocalExecutor = false;
  22. public void setHost(String host) {
  23. MongoConfig.host = host;
  24. }
  25. public void setPort(int port) {
  26. MongoConfig.port = port;
  27. }
  28. public void setDb(String db) {
  29. MongoConfig.db = db;
  30. }
  31. public void setUser(String user) {
  32. MongoConfig.user = user;
  33. }
  34. public void setPassword(String password) {
  35. MongoConfig.password = password;
  36. }
  37. public void setExecutorService(ExecutorService executor) {
  38. MongoConfig.executor = executor;
  39. }
  40. //前面讲解的两个类
  41. /*******************************************/
  42. static MongoDatabase applicationMongoDb;
  43. static MongoClient applicationMongoClient;
  44. /*******************************************/
  45. public static MongoCollection<Document> getCollection(String name) {
  46. if (applicationMongoDb == null) {
  47. synchronized (MongoCollection.class) {
  48. if (applicationMongoDb == null) {
  49. if (host == null || host.isEmpty() || port == 0 || db == null || db.isEmpty()) {
  50. log.info("config failed");
  51. return null;
  52. } else {
  53. List<MongoCredential> list = new ArrayList<>();
  54. if (user != null && !user.isEmpty() && password != null && !password.isEmpty()) {
  55. list.add(MongoCredential.createCredential(user, db, password.toCharArray()));
  56. }
  57. applicationMongoClient = new MongoClient(new ServerAddress(host, port), list);
  58. applicationMongoDb = applicationMongoClient.getDatabase(db);
  59. }
  60. }
  61. }
  62. }
  63. return applicationMongoDb.getCollection(name);
  64. }
  65. static synchronized ExecutorService initExecutorService() {
  66. if (executor == null) {
  67. synchronized (MongoConfig.class) {
  68. if (executor == null) {
  69. executor = Executors.newFixedThreadPool(10);
  70. isLocalExecutor = true;
  71. }
  72. }
  73. }
  74. return executor;
  75. }
  76. public static void execute(Runnable r) {
  77. initExecutorService();
  78. executor.execute(r);
  79. }
  80. public static <V> Future<V> submit(Callable<V> callable) {
  81. return initExecutorService().submit(callable);
  82. }
  83. @PreDestroy
  84. public void destroy() {
  85. shutdown();
  86. }
  87. public static void shutdown() {
  88. try {
  89. if (applicationMongoClient != null)
  90. applicationMongoClient.close();
  91. } catch (Throwable throwable) {
  92. log.error("", throwable);
  93. }
  94. TryToDo.toTry(() -> {
  95. if (isLocalExecutor) {
  96. log.info("try to shutdown executor");
  97. ExecutorService executorService = (ExecutorService) executor;
  98. if (!executorService.isShutdown())
  99. executorService.shutdown();
  100. }
  101. }).ifFailed(e -> log.error("", e));
  102. }
  103. }

增删改查的实现类

  1. import com.ifunpay.util.mongo.MongoConfig;
  2. import com.mongodb.client.AggregateIterable;
  3. import com.mongodb.client.MongoCollection;
  4. import org.bson.Document;
  5. import org.springframework.stereotype.Component;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. @Component
  9. public class MongodbDao {
  10. public int countResult(String collectionName, Document filter) {
  11. return (int) MongoConfig.getCollection(collectionName).count(filter);
  12. }
  13. public List<Document> find(String collectionName, Document filter) {
  14. ArrayList list = new ArrayList();
  15. MongoConfig.getCollection(collectionName).find(filter).iterator().forEachRemaining(list::add);
  16. return list;
  17. }
  18. public List<Document> find(String collectionName, Document filter, Document sort, int limit) {
  19. List<Document> list = new ArrayList<>();
  20. MongoConfig.getCollection(collectionName).find(filter).sort(sort).limit(limit).iterator().forEachRemaining(list::add);
  21. return list;
  22. }
  23. public static List<Document> find(String collectionName, Document filter, Document sort, int start, int size) {
  24. List<Document> list = new ArrayList<>();
  25. MongoConfig.getCollection(collectionName).find(filter).sort(sort).skip(start).limit(size).iterator().forEachRemaining(list::add);
  26. return list;
  27. }
  28. }

发表评论

表情:
评论列表 (有 0 条评论,470人围观)

还没有评论,来说两句吧...

相关阅读