1.maven引用JDBC驱动包

<!-- mongodb 驱动包 -->

<dependency>

<groupId>org.mongodb</groupId>

<artifactId>mongo-java-driver</artifactId>

<version>3.2.2</version>

</dependency>

2.调用MongoDB相关功能工具类

/**

* MongoDB工具类

* @author jiangwei

*

*/

public class MongoDBUtil {



private static Logger logger=LoggerFactory.getLogger(MongoDBUtil.class);



/**

*

* 获取MongoDB数据库连接

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @return MongoClient

*/

public static MongoClient getMongoClient(String host,int port,String username,String databaseName,String password){

//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址

//ServerAddress()两个参数分别为 服务器地址 和 端口

ServerAddress serverAddress = new ServerAddress(host,port);

List<ServerAddress> addrs = new ArrayList<ServerAddress>();

addrs.add(serverAddress);



//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码

MongoCredential credential = MongoCredential.createScramSha1Credential(username, databaseName, password.toCharArray());

List<MongoCredential> credentials = new ArrayList<MongoCredential>();

credentials.add(credential);



//通过连接认证获取MongoDB连接

MongoClient mongoClient = new MongoClient(addrs,credentials);

return mongoClient;

}



/**

* MongoDB 获取数据库连接

*

* @param mongoClient MongoDB客户端连接

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

*

* @return MongoDatabase

*/

public static MongoDatabase getMongoDatabase(MongoClient mongoClient,String host,int port,String username,String databaseName,String password){



try {

//连接到数据库

MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);

logger.info("Connect to database successfully");



return mongoDatabase;

} catch (Exception e) {

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}



return null;

}





/**

* 创建集合

* 使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

*

*/

public static void createCollection(String host,int port,String username,String databaseName,String password,String collectionName){

try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase =getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");

mongoDatabase.createCollection(collectionName);

logger.info("集合创建成功");

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

}





/**

* 获取集合

* 使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

*

*/

public static void getCollection(String host,int port,String username,String databaseName,String password,String collectionName){

try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");

collection.count();

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

}



/**

* 插入文档

* 使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

* @param documentMap 请求参数

*

*/

public static void addData(String host,int port,String username,String databaseName,String password,

String collectionName,Map<String, Object> documentMap){



try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");

//插入文档

/**

* 1. 创建文档 org.bson.Document 参数为key-value的格式

* 2. 创建文档集合List<Document>

* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)

* */

// Document document = new Document("title", "MongoDB").

// append("description", "database").

// append("likes", 100).

// append("by", "Fly");

Document document = new Document();

for(Map.Entry<String, Object> entry : documentMap.entrySet()){

document.append(entry.getKey(), entry.getValue());

}

List<Document> documents = new ArrayList<Document>();

documents.add(document);

collection.insertMany(documents);

logger.info("文档插入成功");

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

}





/**

* 检索所有文档

* 使用 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

*

*/

public static List<Document> findAll(String host,int port,String username,String databaseName,String password,

String collectionName){



List<Document> list=new ArrayList<Document>();



try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");



//检索所有文档

/**

* 1. 获取迭代器FindIterable<Document>

* 2. 获取游标MongoCursor<Document>

* 3. 通过游标遍历检索出的文档集合

* */

FindIterable<Document> findIterable = collection.find();

MongoCursor<Document> mongoCursor = findIterable.iterator();

while(mongoCursor.hasNext()){

list.add(mongoCursor.next());

}

logger.info("数据条数============>"+list.size());

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

return list;

}



/**

* 更新文档

* 使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

* @param queryName 更新条件字段名

* @param queryValue 更新条件字段值

* @param documentMap 请求参数

*

*/

public static List<Document> updateData(String host,int port,String username,String databaseName,String password,

String collectionName,String queryName,String queryValue,Map<String, Object> documentMap){



List<Document> list=new ArrayList<Document>();





try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");



//更新文档 将文档中likes=100的文档修改为likes=200



Document document = new Document();

for(Map.Entry<String, Object> entry : documentMap.entrySet()){

document.append(entry.getKey(), entry.getValue());

}



collection.updateMany(Filters.eq(queryName, queryValue), new Document("$set",document));

//检索查看结果

FindIterable<Document> findIterable = collection.find();

MongoCursor<Document> mongoCursor = findIterable.iterator();

while(mongoCursor.hasNext()){

list.add(mongoCursor.next());

}

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}



return list;

}



/**

* 删除第一个文档

* 要删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 findOne()方法来获取第一个文档,然后使用remove 方法删除。

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

* @param columnName 删除数据查询条件字段名称

* @param value 删除数据查询条件字段值

*

*/

public static List<Document> deleteOne(String host,int port,String username,String databaseName,String password,

String collectionName,String columnName,String value){



List<Document> list=new ArrayList<Document>();



try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");



//删除符合条件的第一个文档

collection.deleteOne(Filters.eq(columnName, value));

//检索查看结果

FindIterable<Document> findIterable = collection.find();

MongoCursor<Document> mongoCursor = findIterable.iterator();

while(mongoCursor.hasNext()){

list.add(mongoCursor.next());

}

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

return list;

}



/**

* 删除多个文档

* 要删除集合中的多个文档,首先你需要使用com.mongodb.DBCollection类中的 findOne()方法来获取第一个文档,然后使用remove 方法删除。

*

* @param host:服务器地址

* @param port:服务器端口号

* @param username 用户名

* @param databaseName 数据库名称

* @param password 密码

* @param collectionName 集合名称

*

*/

public static List<Document> deleteMany(String host,int port,String username,String databaseName,String password,

String collectionName,String columnName,String value){



List<Document> list=new ArrayList<Document>();



try{

//通过连接认证获取MongoDB连接

MongoClient mongoClient = getMongoClient(host, port, username, databaseName, password);

// 连接到数据库

MongoDatabase mongoDatabase = getMongoDatabase(mongoClient,host, port, username, databaseName, password);

logger.info("Connect to database successfully");



MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);

logger.info("集合 test 选择成功");



//删除所有符合条件的文档

collection.deleteMany(Filters.eq(columnName, value));

//检索查看结果

FindIterable<Document> findIterable = collection.find();

MongoCursor<Document> mongoCursor = findIterable.iterator();

while(mongoCursor.hasNext()){

list.add(mongoCursor.next());

}

mongoClient.close();

}catch(Exception e){

logger.error( e.getClass().getName() + ": " + e.getMessage() );

}

return list;

}



public static void main(String[] args) {

// MongoDB的服务器地址

String host="127.0.0.1";

// MongoDB的服务器端口号

int port=27017;



// MongoDB的服务器连接数据库名称

String databaseName="jwbasta";

String username="jwbasta";

String password="****";

Map<String, Object> documentMap=new HashMap<String, Object>();

documentMap.put("id", 1);

documentMap.put("name", "aa");

documentMap.put("sex", "男");

documentMap.put("address", "深圳");



addData(host, port, username, databaseName, password, "test", documentMap);

}







}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐