SpringBoot3入门图文实例之17-整合MongoDB

本文介绍了MongoDB的基本概念,如与关系数据库的对比,安装步骤,以及如何在SpringBoot项目中使用MongoDB进行CRUD操作。还涉及了MongoDB的索引、主键和MongoRepository的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB是最流行的NoSQL数据库之一

关系数据库和MongoDB对比

SQL 术语/概念

MongoDB 术语/概念

解释/说明

DataBase

DataBase

数据库

Table

Collection

数据库表/集合

Row

Document

数据记录行/文档

Column

Field

数据字段/域

index

index

索引

Table joins

表连接,MongoDB 不支持

primary key

primary key

主键,MongoDB 自动将 _id 字段设置为主键

MongoDB 和关系数据库一样有库的概念,一个 MongoDB 数据库可以有很多数据库,MongoDB 中的集合就相当于我们关系数据库中的表,文档就相当于关系数据库中的行,域就相当于关系数据库中的列,MongoDB 也支持各种索引有唯一主键,但不支持表连接查询。

1. 安装MongoDB

1.1. 使用宝塔面板在服务器上安装MongoDB

1.2. 安装后修改配置将绑定端口127.0.0.1改为0.0.0.0

127.0.0.1 只能本机程序访问

0.0.0.0 其他都可以访问

1.3. 开启安全验证

1.4. 新建数据库test1

1.5. 宝塔添加安全端口

1.6. 阿里云安全组添加端口27017

2. 使用Navicat连接MongoDB

3. idea新建一个项目测试对MongoDB进行增删改查

3.1. 创建项目 选择依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

3.2. 修改配置文件application.porperties 添加MongoDB服务器连接信息

application.porperties

spring.data.mongodb.uri=mongodb://test1:test1_123*@101.132.251.114:27017/test1

3.3. 新建实体类User

pojo/User.java

package com.example._17mongodb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Long id;
    private String username;
    private String password;

}

3.4. 在测试类中编写测试,先测试增加数据

package com.example._17mongodb;

import com.example._17mongodb.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;

@SpringBootTest
class ApplicationTests {

    @Test
    void contextLoads() {
    }

    // 注入MongoTemplate,用于操作MongoDB数据库
    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void testSave() {
        User user = new User(1L, "zhangsan", "123456");
        System.out.println(mongoTemplate.save(user));
        user = new User(2L, "lisi", "123456");
        System.out.println(mongoTemplate.save(user));
    }
}

3.5. 测试执行

通过宝塔面板也可以查看文档数量

3.6. 编写测试删改查数据

package com.example._17mongodb;

import com.example._17mongodb.pojo.User;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.List;


@SpringBootTest
class ApplicationTests {

    @Test
    void contextLoads() {
    }

    // 注入MongoTemplate,用于操作MongoDB数据库
    @Autowired
    private MongoTemplate mongoTemplate;

    // 测试增加
    @Test
    void testSave() {
        User user = new User(1L, "zhangsan", "123456");
        System.out.println(mongoTemplate.save(user));
        user = new User(2L, "lisi", "123456");
        System.out.println(mongoTemplate.save(user));
        user = new User(3L, "wangwu", "123456");
        System.out.println(mongoTemplate.save(user));
    }
    
    // 测试查找
    @Test
    void testFind() {
        // 查询单个
//        User user = mongoTemplate.findById(1L, User.class);
//        System.out.println(user);

        // 查询所有
//        mongoTemplate.findAll(User.class).forEach(System.out::println);

        // 根据条件查询单个
//        Query query = new Query(Criteria.where("username").is("zhangsan"));
//        User user = mongoTemplate.findOne(query, User.class);

        // 根据条件查询多个
        Query query = new Query(Criteria.where("password").is("123456"));
        List<User> users = mongoTemplate.find(query, User.class);
        users.forEach(System.out::println);
    }

    // 测试删除
    @Test
    void testDelete() {
        Query query = new Query(Criteria.where("id").is(3));
        System.out.println(mongoTemplate.remove(query, User.class));
    }

    // 测试更新
    @Test
    void testUpdate() {
        // 方式1
//        Query query = new Query(Criteria.where("id").is(1));
//        User user = mongoTemplate.findOne(query, User.class);
//        user.setUsername("zhangsan1");
//        mongoTemplate.save(user);
        
        // 方式2
        Query query = new Query(Criteria.where("id").is(1));
        Update update = new Update().set("username", "zhangsan1").set("password", "111111");
        UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
//        UpdateResult result = mongoTemplate.updateMulti(query, update, User.class);
        System.out.println(result.getMatchedCount());
    }
}

3.7. 使用MongoRepository

MongoRepository类似JPA,可以根据方法名自动生成查询

3.7.1. 新建一个接口UserRepository继承MongoRepository
package com.example._17mongodb.repository;

import com.example._17mongodb.pojo.User;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, Long> {
    User findByUsername(String username);
}
3.7.2. 在测试类中测试UserRepository

UserRepository 提供了增删改查的方法,并按照自定义的格式生成查询


    @Autowired
    private UserRepository userRepository;

    @Test
    void testRepositoryAdd() 
    	// 测试添加
//        User user = new User(4L, "liubei", "123456");
//        System.out.println(userRepository.save(user));
//        user = new User(5L, "guanyu", "123456");
//        System.out.println(userRepository.save(user));
//        user = new User(6L, "zhangfei", "123456");
//        System.out.println(userRepository.save(user));

    	// 测试自定义方法
//        User u = userRepository.findByUsername("zhangsan");
//        System.out.println(u);

        for (long i = 0; i < 100; i++) {
            User user = new User(i, "zhangsan" + i, "123456");
            userRepository.save(user);
        }
    }

    // 测试分页
	@Test
    public void testPage1() {
        for (long i = 0; i < 100; i++) {
            User user = new User(i, "zhangsan" + i, "123456");
            userRepository.save(user);
        }
    }
    @Test
    public void testPage2() {
//        List<Sort.Order> orders = new ArrayList<Sort.Order>();
//        orders.add(new Sort.Order(Sort.Direction.DESC, "id"));
        Sort sort = Sort.by(new Sort.Order(Sort.Direction.DESC, "id"));
        Pageable pageable = PageRequest.of(2, 10, sort);
        Page page = userRepository.findAll(pageable);
        System.out.println("users: " + page.getContent().toString());
    }

4. 其他MongoDB工具

https://studio3t.com/download/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值