Nosql数据库MongoDB 理论+实践(JAVA API操作) 代码实践

一、数据库

数据库的概念:

程序运行都是在内存中,而内存的特点就是,一旦断电,那么内存中的数据都会丢失。

为了保存我们的数据,我们需要能够把数据持久化到硬盘的工具。

这种用来按照数据结构组织、存储和管理数据的仓库,就是数据库。

数据库分类

关系型数据库

英文名:RDB

例如:mysql , sqlserver , db2 , oracle

特点就是:打开都是表

非关系型数据库

英文名:nosql

mongodb , redis

文档存储

键值对kv存储

二、Mongo

存储的数据类型

文档型的数据存储,结构类似于json,叫做bson

下载

小数位,偶数位为稳定版,例如3.2, 奇数位为开发版, 如3.1

对32位系统并不友好。

三个层次

数据库(包含多个集合)

集合(包含多个文档)

文档(我们操作的东西)

基本指令(shell)

show dbs    - 显示当前所有数据
use 数据库名  - 进入指定的数据库 如果没有 也能进入  在插入第一条数据的时候创建改库
db  - 展示当前所处的数据库
show collections   - 看看当前数据库里有什么集合

小知识:

program files 和 program files(x86) 的区别是:

x86放的是32位的程序 另一个放64位程序

三、Mongo Manager Free

概念

mongodb的图形化管理程序

在这里插入图片描述

四、MongoDB JAVA API : MongoDB Driver

代码地址

https://gitee.com/gbss/when-iwasfree

引入依赖

<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.14.1</version>
</dependency>

MongoDB Client

获取客户端实例

    @Autowired
    private static MongoClient mongoClient;

    // mongodb的url地址
    private static String mongodbUrl = "mongodb://localhost:27017";

    /**
     * 初始化实例  获得一个连接
     * 此处是单例模式
     * 做了悲观锁,防止高并发时获取到多个实例
     *
     * @return
     */
    public synchronized static MongoClient getInstance() {
    
    
        if (null == mongoClient) {
    
    
            mongoClient = MongoClients.create(mongodbUrl);
            if (null != mongoClient) {
    
    
                log.info("mongoClient connect success!");
            } else {
    
    
                log.info("mongoClient connect failed!");
            }
        }
        return mongoClient;
    }

关闭连接

    /**
     * 关闭连接
     */
    public void close() {
    
    
        if (null != mongoClient) {
    
    
            mongoClient.close();
            mongoClient = null;
        }
    }

修改连接的客户端url

    /**
     * 设置mongodb的url地址
     *
     * @param mongodbUrl1
     */
    public static void setMongodbUrl(String mongodbUrl1) {
    
    
        mongodbUrl = mongodbUrl1;
    }

创建集合collection与获取database

    /**
     * mongodb的数据结构  database - collection - document
     * 创建collection
     *
     * @param dataBaseName
     * @param collectionName
     */
    public void createCollection(String dataBaseName, String collectionName) {
    
    
        getDatabase(dataBaseName).createCollection(collectionName);
    }

    /**
     * 获取database
     *
     * @param dataBaseName
     * @return
     */
    public MongoDatabase getDatabase(String dataBaseName) {
    
    
        return mongoClient.getDatabase(dataBaseName);
    }

获取集合

    /**
     * 获取指定database下所有的集合名
     *
     * @param dataBaseName
     * @return
     */
    public List<String> listCollectionNames(String dataBaseName) {
    
    
        List<String> stringList = new ArrayList<String>();
        mongoClient.getDatabase(dataBaseName).listCollectionNames().forEach((Consumer<? super String>) t -> {
    
    
            stringList.add(t);
        });
        return stringList;
    }

    /**
     * 获取指定的集合
     * @param dataBaseName
     * @param collectionName
     * @return
     */
    public MongoCollection<Document> getCollectionByName(String dataBaseName, String collectionName) {
    
    
        return getDatabase(dataBaseName).getCollection(collectionName);
    }

通过id查询文档

   /**
     * 通过id(objectid)精确查询
     * @param dataBaseName
     * @param collectionName
     * @param id
     * @return
     */
    public FindIterable<Document> findMongoDbDocById(String dataBaseName, String collectionName, String id){
    
    
        BasicDBObject searchDoc = new BasicDBObject().append("_id", id);
        return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
    }

    /**
     * 通过id(objectid)模糊查询
     * @param dataBaseName
     * @param collectionName
     * @param id
     * @return
     */
    public FindIterable<Document>  findMongoDbDocByIdRegex(String dataBaseName, String collectionName, String id){
    
    
        BasicDBObject searchDoc = new BasicDBObject().append("_id", new BasicDBObject("$regex",id));
        return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
    }

    /**
     * 通过开始id和结束id 查询(根据objectId范围查询)
     * @param dataBaseName
     * @param collectionName
     * @param startId
     * @param endId
     * @return
     */
    public FindIterable<Document>  findMongoDbDocById(String dataBaseName, String collectionName, String startId,String endId){
    
    
        BasicDBObject searchDoc = new BasicDBObject().append("_id", new BasicDBObject("$gte", startId).append("$lte", endId));
        return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
    }

    /**
     * 自己组装检索条件
     * @param dataBaseName
     * @param collectionName
     * @param basicDBObject
     * @return
     */
    public FindIterable<Document> findMongoDbDoc(String dataBaseName, String collectionName,BasicDBObject basicDBObject){
    
    
        return getCollectionByName(dataBaseName,collectionName).find(basicDBObject);
    }

    /**
     * 限制查询返回的条数
     * @param dataBaseName
     * @param collectionName
     * @param basicDBObject
     * @param limitNum
     * @return
     */
    public FindIterable<Document> findMongoDbDoc(String dataBaseName, String collectionName,BasicDBObject basicDBObject,Integer limitNum){
    
    
        return findMongoDbDoc(dataBaseName,collectionName,basicDBObject).limit(limitNum) ;
    }

    /**
     * 通过开始id和结束id查询
     * 并限制查询返回的条数
     * @param dataBaseName
     * @param collectionName
     * @param startId
     * @param endId
     * @param limitNum
     * @return
     */
    public FindIterable<Document>  findMongoDbDocById(String dataBaseName, String collectionName, String startId,String endId,Integer limitNum){
    
    
        return findMongoDbDocById(dataBaseName,collectionName,startId,endId).limit(limitNum);
    }


插入文档

    /**
     * 插入操作,注意插入时,如果数据已经存在会报错,插入时必须数据不存在,不会自动进行覆盖
     * 插入单条记录
     * @param dataBaseName
     * @param collectionName
     * @param document
     */
    public void insertDoc(String dataBaseName, String collectionName, Document document){
    
    
        getCollectionByName(dataBaseName,collectionName).insertOne(document);
    }

    /**
     * 插入多条记录
     * @param dataBaseName
     * @param collectionName
     * @param listData
     */
    public void insertDoc(String dataBaseName, String collectionName,List<? extends Document> listData){
    
    
        getCollectionByName(dataBaseName,collectionName).insertMany(listData);
    }

更新文档

    /**
     * 更新单条文档
     * @param dataBaseName
     * @param collectionName
     * @param var1
     * @param var2
     */
    public void updateDoc(String dataBaseName, String collectionName, Bson var1, Bson var2){
    
    
        getCollectionByName(dataBaseName,collectionName).updateOne(var1,var2);
    }

    /**
     * 更新多条文档
     * @param dataBaseName
     * @param collectionName
     * @param var1
     * @param list
     */
    public void updateDoc(String dataBaseName, String collectionName, Bson var1, List<? extends Bson> list){
    
    
        getCollectionByName(dataBaseName,collectionName).updateMany(var1,list);
    }

猜你喜欢

转载自blog.csdn.net/GBS20200720/article/details/121426082
今日推荐