Java语言标准的数据库是MySQL,但是有些时候也会用到MongoDB
由于是第一次处理MongoDB,所以将代码以及思路记录下了,方便以后回顾总结
我连接的MongoDB的数据是远程数据库,开发测试用的本地库,连接本地数据库的方法网上有很多
碰见一个问题:用@Value()注解无法获取配置文件中的值,所以MongoDB地址和库直接写的,后续找到原因并解决后会贴出来。——已解决
MongoDB工具类:
package net.pushi.neo4jdata.util;
import com.mongodb.BasicDBObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* @ClassName MongoDBUtil
* @Desc TODO MongoDB 工具类
* @Date 2020/3/10 9:43
* @Version 1.0
*/
@Component
public class MongoDBUtil {
@Autowired
private static MongoTemplate mongoTemplate;
//参数处理
public static BasicDBObject setParameter(Map<String, Object> map){
BasicDBObject query = new BasicDBObject();
query.putAll(map);
return query;
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 创建集合,并返回是否创建成功 -2:已存在 / -1:创建失败 / 1:创建成功
* @Date 2020/3/10 10:59
* @Version 1.0
*/
public static Integer createCollection(String collectionName){
// 先判断集合是否存在
if(mongoTemplate.collectionExists(collectionName)){
return -2;
}else{
// 创建一个集合
mongoTemplate.createCollection(collectionName);
// 判断集合是否存在
if(mongoTemplate.collectionExists(collectionName)){
return 1;
}else{
return -1;
}
}
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 在指定集合中添加数据
* @Date 2020/3/10 11:12
* @Version 1.0
*/
public static void add(Collection<?> batchToSave , String collectionName){
mongoTemplate.insert(batchToSave,collectionName);
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 根据条件和指定集合删除数据
* @Date 2020/3/10 14:20
* @Version 1.0
*/
public static void delete(Query query , Object obj , String collectionName){
mongoTemplate.remove(query, obj.getClass(), collectionName);
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 根据条件更新数据
* @Date 2020/3/10 14:30
* @Version 1.0
*/
public static void update(Query query , Update update , Object obj , String collectionName){
mongoTemplate.updateMulti(query , update , obj.getClass() , collectionName);
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 获取指定集合下的全部数据
* @Date 2020/3/10 11:18
* @Version 1.0
*/
public static List<?> getAllByCollectionName(Object obj , String collectionName){
return mongoTemplate.findAll(obj.getClass(),collectionName);
}
/*
* @ClassName MongoDBUtil
* @Desc TODO 根据条件和集合名称查询数据
* @Date 2020/3/10 11:31
* @Version 1.0
*/
public static List<?> getByConditionAndCollectionName(Query query , Object obj , String collectionName){
return mongoTemplate.find(query, obj.getClass() , collectionName);
}
}
根据自己的需要对数据进行处理
数据查询处理代码:
package net.pushi.neo4jdata.dataParser.service.impl;
import com.mongodb.ConnectionString;
import com.mongodb.client.*;
import com.mongodb.client.result.UpdateResult;
import net.pushi.neo4jdata.dataParser.service.MongoDBService;
import net.pushi.neo4jdata.util.MongoDBUtil;
import org.bson.Document;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class MongoDBServiceImpl implements MongoDBService{
@Value("${spring.data.mongodb.uri}")
private String uri;
@Value("${spring.data.mongodb.db}")
private String db;
public MongoDatabase createConnect(){
MongoClient mongoClient = MongoClients.create(new ConnectionString(uri));
MongoDatabase database = mongoClient.getDatabase(db);
return database;
}
public MongoCollection<Document> getDBCollection(String collectionName) {
Map<String, MongoCollection<Document>> dbCollectionMap = new ConcurrentHashMap<String, MongoCollection<Document>>();
MongoCollection<Document> collection = null;
if (dbCollectionMap.containsKey(collectionName)) {
collection = dbCollectionMap.get(collectionName);
} else {
collection = createConnect().getCollection(collectionName);
if (null != collection) {
dbCollectionMap.put(collectionName, collection);
}
}
return collection;
}
@Override
public List findAllByCollectionName(Map<String, Object> map) {
Map<String,Object> filter = new HashMap<>();
if (map.get("filter")instanceof Map){
filter = (Map<String, Object>)map.get("filter");
}
MongoCursor<Document> cursor = getDBCollection(map.get("collectionName").toString()).find(MongoDBUtil.setParameter(filter)).skip(0).iterator();
List<Map<String,Object>> mapList = new ArrayList<>();
while (cursor.hasNext()){
Document document = cursor.next();
mapList.add(document);
}
System.out.println("mapList=========》"+mapList);
cursor.close();
return mapList;
}
}
记录一下Springboot—MongoDB驱动包中的一些方法:
FindIterable limit(int var1):查询结果分页,每页条数var1
FindIterable skip(int var1):忽略查询结果的前var1条
FindIterable sort(@Nullable Bson var1):查询结果排序(升序或降序)
关键的类:1、MongoClient 类;2、MongoDatabase接口以及它的实现类
参考文章地址:
https://www.cnblogs.com/jayinnn/p/9593512.html
https://blog.csdn.net/qq_19167629/article/details/82108680
后续还会持续更新:新增、删除、更新数据的过程和代码。