SpringBoot整合MongoDB 及 基本使用

目录

1.MongoDB基本介绍

2.MongoDB的特点

3.MongoDB的体系结构 

 4.MongoDB的数据类型

5.SpringBoot整合MongoDB **

1.导入依赖

2.启动MongoDB数据库

 3.编写启动类

 4.编写实体类(基本操作 每一个表都对应一个实体)

5.测试 增删改查(API)


1.MongoDB基本介绍

MongoDB介绍_30岁老阿姨的博客-CSDN博客_mongodb介绍

MongoDB是一个文档数据库,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是BSON,一种类似JSON的二进制形式的存储格式,简称Binary JSON ,和JSON一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。

对于数据量大而言,显然不能够使用关系型数据库和内存数据库进行存储,我们需要通过MongoDB进行存储

2.MongoDB的特点

MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。

具体特点总结如下:

  1. 面向集合存储,易于存储对象类型的数据

  2. 模式自由

  3. 支持动态查询

  4. 支持完全索引,包含内部对象

  5. 支持复制和故障恢复

  6. 使用高效的二进制数据存储,包括大型对象(如视频等)

  7. 自动处理碎片,以支持云计算层次的扩展性

  8. 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程 序, 社区中也提供了对Erlang及.NET 等平台的驱动程序

  9. 文件存储格式为 BSON(一种 JSON 的扩展)

3.MongoDB的体系结构 

 MongoDB 的逻辑结构主要由:数据库(database)、 集合(collection)、文档(document)这三部分组成的。

  1. MongoDB 的文档(document),相当于关系数据库中的一行记录。

  2. 多个文档组成一个集合(collection),相当于关系数据库的表。

  3. 多个集合(collection),逻辑上组织在一起,就是数据库(database)。

  4. 一个 MongoDB 实例支持多个数据库(database)。 文档(document)、集合(collection)、数据库

 SQL和MongoDB对比

RDBMS MongoDB
database(数据库) database(数据库)
table (表) collection( 集合)
row( 行) document( BSON 文档)
column (列/字段) field (字段)
index(唯一索引、主键索引) index (支持地理位置索引、全文索引)
join (主外键关联) MongoDB不支持
primary key(指定某个列做主键) primary key (不需要指定 固定 _id 字段做为主键 自带的)

 4.MongoDB的数据类型

数据类型 说明 解释说明 Document举例
String 字符串 UTF-8 编码的字符串才是 合法的。 {key:“cba”}
Integer 整型数值 根据你所采用的服务器, 可分为 32 位或 64 位。 {key:1}
Boolean 布尔值 用于存储布尔值(真/ 假)。 {key:true}
Double 双精度浮点值 用于存储浮点值 {key:3.14}
ObjectId 对象ID 用于创建文档的ID {_id:new ObjectId()}
Array 数组 用于将数组或列表或多个 值存储为一个键 {arr:[“a”,“b”]}
Timestamp 时间戳 从开始纪元开始的毫秒数 { ts: new Timestamp() }
Object 内嵌文档 文档可以作为文档中某个 key的value {o:{foo:“bar”}}
Null 空值 表示空值或者未定义的对 象 {key:null}
Date或者 ISODate 格林尼治时间 日期时间,用Unix日期格 式来存储当前日期或时 间。 {birth:new Date()}
File 文件 1、二进制转码(Base64)后 存储 (<16M) 2、 GridFS(>16M) GridFS 用两个集合来存储一个文件:fs.files与 fs.chunks 真正存储需要使用mongofiles -d gridfs put song.mp

5.SpringBoot整合MongoDB **

1.导入依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
    </parent>

    <dependencies>
      	
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
      
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 设置编译版本为1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.启动MongoDB数据库

看网上一些教程吧,我这里linux安装的

 3.编写启动类


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MongoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MongoApplication.class, args);
    }
}

 4.编写实体类(基本操作 每一个表都对应一个实体)

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("user")//这里最好写上  表示操作哪个集合(表)
public class User {
    @Id
    private ObjectId id;
    

    private String username;
    private Integer age;
    private String address;
}

5.测试 增删改查(API)

1.首先依赖出入   MongoTemplate(MongoDB依赖中的)

2.新增代码(如果数据库中没有集合(表),会自动创建)

//    新增
    @Test
    public void text01(){
        User user = new User(new ObjectId(),"jack",11,"天津");
//        User user1 = mongoTemplate.insert(user);
        User user1 = mongoTemplate.insert(user, "user");//指定字段添加
        System.out.println(user1);
    }

3.删除

@Test
    public void text02(){
        Query query = new Query();//条件对象
        DeleteResult remove = mongoTemplate.remove(query,User.class);//没条件 全删 后边要加上实体类对应的表
        System.out.println(remove);//两条数据
    }
 @Test//根据条件删除
    public void text03(){
        Query query = new Query(Criteria.where("id").is(new ObjectId("6354084f8136ce1f102b9003")));
        DeleteResult remove = mongoTemplate.remove(query, User.class);
        System.out.println(remove);
    }
    @Test//多条件删除
    public void text04(){
        Query query = new Query(Criteria.where("username").is("jack1").and("age").is(12));
        DeleteResult remove = mongoTemplate.remove(query,User.class);
        System.out.println(remove);

    }

4.修改

  @Test
    public void text05(){
        Query query = new Query(Criteria.where("age").gt(12));//条件 age > 12

        Update update = new Update();
        update.set("username","huahua");
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, User.class);
        System.out.println(updateResult);

    }

5.查询

//    查询 根据id 做查询
    @Test
    public void text06(){
        User user = mongoTemplate.findById(new ObjectId("6354086f8136ce237011c305"), User.class);
        System.out.println(user);
//        全查询
        List<User> userList = mongoTemplate.findAll(User.class);
        for (User user1 : userList) {
            System.out.println(user1);
        }
    }
    @Test//条件查询
    public void text07(){
        Query query = new Query(Criteria.where("username").regex("h"));
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);
    }


    @Test //条件查询  or
    public void text08(){
        Query query = new Query(Criteria.where("").orOperator(
                Criteria.where("age").is(14),
                Criteria.where("address").regex("海")
        ));

        List<User> users = mongoTemplate.find(query, User.class);
        for (User user : users) {
            System.out.println(user);
        }
    }


    @Test//分页查询
    public void text09(){
        Query query = new Query();
        query.skip(1).limit(3);//第一条数据和第二条数据    从第几页开始  展示几条数据
        query.with(Sort.by(Sort.Direction.DESC,"age"));//降序
        List<User> users = mongoTemplate.find(query, User.class);
        for (User user : users) {
            System.out.println(user);
        }
    }

springboot操作mongodb基本都是一些api ,用到的时候查询即可

猜你喜欢

转载自blog.csdn.net/weixin_50769390/article/details/127468619