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中进行查找操作:
我们发现, 这个值被成功插入进去了.