springboot+mongodb的基本操作 CRUD

1、基于MongoRepository操作 mongodb

配置mongodb上一个文件有提现,这里就不写了。

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件-CSDN博客

java 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>
java 复制代码
@Data
@Document(collection = "User")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;
    private String email;
    private String createDate;
}
java 复制代码
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}
java 复制代码
@ActiveProfiles("test")
@SpringBootTest
public class MongoRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void createTest() {
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("123@qq.com");

        User user1 = userRepository.save(user);
        System.out.println(user1);
    }

    @Test
    public void findAllTest() {
        List<User> list = userRepository.findAll();
        System.out.println(list);
    }

    @Test
    public void findByIdTest() {
        Optional<User> optional = userRepository.findById("6195b9a5c6e3b8f8a0e8c6e3");
        optional.ifPresent(System.out::println);
    }

    @Test
    public void findConditionTest() {
        //name="张三" and age = 20
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        Example<User> example = Example.of(user);

        userRepository.findAll(example);
    }

    @Test
    public void findLikeTest() {
        //设置模糊查询规则
        ExampleMatcher matcher = ExampleMatcher.matching();
        matcher.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);

        User user = new User();
        user.setAge(20);
        user.setName("m");
        Example<User> example = Example.of(user,matcher);

        userRepository.findAll(example);
    }

    @Test
    public void findPageTest(){
        int pageNo = 1;
        int pageSize = 2;
        Pageable pageable = PageRequest.of(pageNo, pageSize);

        User user = new User();
        user.setAge(20);
        user.setName("张三");
        Example<User> example = Example.of(user);

        Page<User> page = userRepository.findAll(example, pageable);
        System.out.println(page.getTotalElements());
    }

    @Test
    public void updateTest(){
        User user = userRepository.findById("6195b9a5c6e3b8f8a0e8c6e3").get();
        user.setName("李四");
        User user1 = userRepository.save(user);
        System.out.println(user1);
    }

    @Test
    public void removeTest(){
        userRepository.deleteById("6195b9a5c6e3b8f8a0e8c6e3");
    }

}

2、基于MongoTemplate操作mongodb

java 复制代码
import com.bilibili.domain.User;
import com.mongodb.client.result.DeleteResult;
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 org.springframework.test.context.ActiveProfiles;

import java.util.List;
import java.util.regex.Pattern;


@SpringBootTest
@ActiveProfiles("test")
public class MongoTemplateTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    private static final String ID = "675bdbb2d3031003cab59e2f";

    @Test
    public void createTest() {
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("123@qq.com");

        User user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }

    @Test
    public void findAllTest() {
        List<User> list = mongoTemplate.findAll(User.class);
        System.out.println(list);
    }

    @Test
    public void findByIdTest() {
        User user = mongoTemplate.findById(ID, User.class);
        System.out.println(user);
    }

    @Test
    public void findConditionTest() {
        Query query = new Query(Criteria.where("name").is("张三").and("age").is(20));
        List<User> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }

    @Test
    public void findLikeTest() {
        String name = "张三";
        String regex = String.format("%s%s%s","^.*",name,".*$");
        // 模糊查询
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Query query = new Query(Criteria.where("name").regex(pattern));
        List<User> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }

    @Test
    public void findPageTest(){
        int pageNo = 1;
        int pageSize = 2;

        Query query = new Query();
        //查询记录数
        long count = mongoTemplate.count(query, User.class);
        //分页查询 (pageNo - 1) * pageSize 表示开始位置
        List<User> list = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
        System.out.println(count);
        System.out.println(list);
    }

    @Test
    public void updateTest(){
        //更新所有符合条件的数据
        User user = mongoTemplate.findById(ID, User.class);
        user.setName("李四");
        user.setAge(30);

        //过滤条件
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        //更新内容
        Update update = new Update();
        update.set("name",user.getName());
        update.set("age",user.getAge());

        UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
        //更新条数
        long modifiedCount = upsert.getModifiedCount();
        System.out.println(modifiedCount);
    }

    @Test
    public void removeTest(){
        Query query = new Query(Criteria.where("_id").is(ID));
        DeleteResult remove = mongoTemplate.remove(query, User.class);
        //删除条数
        long deletedCount = remove.getDeletedCount();
        System.out.println(deletedCount);
    }
}
相关推荐
女王大人万岁10 分钟前
Go标准库 sync 详解
服务器·开发语言·后端·golang
小高Baby@18 分钟前
session、cookie、Jwt-token
开发语言·后端·golang
露天赏雪21 分钟前
JDK8 的入门避坑指南
java·服务器·windows·spring boot·后端·spring·性能优化
wxin_VXbishe27 分钟前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·spring boot·python·spring·django·php
爬山算法29 分钟前
Hibernate(86)如何在性能测试中使用Hibernate?
java·后端·hibernate
菜鸟小杰子30 分钟前
Spring Boot集成asyncTool:复杂任务的优雅编排与高效执行(实战优化版)
java·spring boot·后端
弹简特34 分钟前
【JavaEE06-后端部分】SpringMVC01-Spring MVC第一大核心URL 路由映射【建立连接】与 Postman 接口测试详解
java·spring boot·测试工具·spring·postman
rannn_11135 分钟前
【苍穹外卖|Day3】公共字段自动填充、新增菜品功能、菜品分页查询功能、删除菜品功能、修改菜品功能、起售停售菜品
java·spring boot·后端·学习·项目
无名-CODING43 分钟前
SpringMVC处理流程完全指南:从请求到响应的完整旅程
java·后端·spring
柒.梧.1 小时前
从零搭建SpringBoot+Vue+Netty+WebSocket+WebRTC视频聊天系统
vue.js·spring boot·websocket