Spring Boot 操作 MongoDB


Spring Boot的宗旨是习惯由于配置, 其在导包, 配置等方面极大地简化了我们需要的操作, 所以我们通过简单的配置, 也能轻松的实现对MongoDB的操作

maven中导包

在这里, 我们使用maven来进行管理. 我们在maven配置pom.xml中加入如下代码:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>

便导入了我们所需要的的依赖

配置文件

在Spring Boot的配置文件application.yml中我们编写如下配置:

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test # MongoDB地址和数据库名
      username: root # 用户名
      password: 123456 # 密码

如果是application.propertie则这么写:

spring.data.mongodb.uri=mongodb://localhost:27017/test
spring.data.mongodb.username=root
spring.data.mongodb.password=123456

代码书写

代码部分其实也很简单, 首先我们先编写实体类User:

package cn.bobasyu.entity;

import org.springframework.data.mongodb.core.mapping.Document;

/**
 * 测试用实体类
 *
 * @author Boba
 */
@Document("user")
public class User {
    private Long id;
    private String userName;
    private String password;

    public User() {
    }

    public User(Long id, String userName, String password) {
        this.id = id;
        this.userName = userName;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

这里@Document注解对应的就是我们操作的MongoDB库中对应的documen, 注解的value值就是其名称

编写操作接口:

package cn.bobasyu.repository;

import cn.bobasyu.entity.User;

/**
 * MongoDB操作接口
 *
 * @author Boba
 */
public interface UserRepository {
    /**
     * 插入User对象
     *
     * @param user 添加的User对象
     */
    void saveUser(User user);

    /**
     * 根据用户ID查询用户
     *
     * @param userId 查询的用户ID
     * @return 查询到的用户
     */
    User findUserByUserId(Long userId);

    /**
     * 更新用户信息
     *
     * @param user 需要更新的用户信息
     * @return 成功更新的数据数目
     */
    long updateUser(User user);

    /**
     * 删除用户
     *
     * @param id 删除的用户ID
     * @return 成功删除的数据数目
     */
    long deleteUserById(Long id);
}

然后是实现类:

package cn.bobasyu.repository.impl;

import cn.bobasyu.entity.User;
import cn.bobasyu.repository.UserRepository;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
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.stereotype.Component;

/**
 * MongoDB操作的实体类
 *
 * @author Boba
 */
@Component
public class UserRepositoryImpl implements UserRepository {
    private final MongoTemplate mongoTemplate;

    @Autowired
    public UserRepositoryImpl(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @Override
    public void saveUser(User user) {
        mongoTemplate.save(user);
    }

    @Override
    public User findUserByUserId(Long userId) {
        Query query = new Query(Criteria.where("_id").is(userId));
        return mongoTemplate.findOne(query, User.class);
    }

    @Override
    public long updateUser(User user) {
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = new Update().set("userName", user.getUserName()).set("password", user.getPassword());
        //更新查询返回结果集的第一条
        UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
        //更新查询返回结果集的所有
        // UpdateResult result1 = mongoTemplate.updateMulti(query, update, User.class);
        return result.getMatchedCount();
    }

    @Override
    public long deleteUserById(Long id) {
        Query query = new Query(Criteria.where("_id").is(id));
        DeleteResult result = mongoTemplate.remove(query, User.class);
        return result.getDeletedCount();
    }
}

测试

接下来我们编写测试类进行测试:

package cn.bobasyu;

import cn.bobasyu.entity.User;
import cn.bobasyu.repository.UserRepository;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootTestDemoApplicationTests {
    @Autowired
    private UserRepository userRepository;

    @Test
    void insert() {
        User user = new User(1L, "boba", "123456");
        userRepository.saveUser(user);
    }

    @Test
    void select() {
        User user = userRepository.findUserByUserId(1L);
        System.out.println(user);
    }

    @Test
    void update() {
        User user = userRepository.findUserByUserId(1L);
        user.setUserName("bobasyu");
        long result = userRepository.updateUser(user);
        Assert.assertEquals(result,1L);
    }

    @Test
    void delete() {
        long result = userRepository.deleteUserById(1L);
        Assert.assertEquals(result, 1L);
    }
}

插入数据后我们在MongoDB中进行查找操作:
MongoDB我们发现, 这个值被成功插入进去了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值