我的spring-boot-study之mongodb的应用
我的spring-boot-study之mongodb的应用
1.首先编写pom文件,加入包依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- mongodb驱动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- mongodb驱动结束 -->
</dependencies>
2.编写代码
2.1 编写实体entity.User
package com.example.mongodb.entity;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@Document("user")
public class User {
private String id;
private String name;
private Integer age;
}
注:@Document注解是mongodb带的,用于标注该类对应的哪个集合
2.2 添加单测文件com.example.mongodb.UserTest
package com.example.mongodb;
import com.example.mongodb.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserTest {
@Resource
private MongoTemplate mongoTemplate;
@Test
public void getAll(){
mongoTemplate.findAll(User.class).forEach(System.out::println);
}
}
注:自动注入类MongoTemplate也是由spring-boot-starter-data-mongodb管理,提供对应集合的增删改查操作。使用时需要指定集合对应类是哪一个。
2.3 添加控制器controller.UserController文件
package com.example.mongodb.controller;
import com.example.mongodb.entity.User;
import com.mongodb.client.result.DeleteResult;
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.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/rest")
public class UserController {
@Resource
private MongoTemplate mongoTemplate;
@GetMapping("/user")
public List<User> getAll() {
return mongoTemplate.findAll(User.class, "user");
}
@PostMapping("/user")
public User add(@RequestBody User user) {
return mongoTemplate.insert(user, "user");
}
@DeleteMapping("/user/{id}")
public DeleteResult delete(@PathVariable String id) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
return mongoTemplate.remove(query, User.class, "user");
}
}
注:Query类实际上就是mongodb的查询类,此处作用是当作过滤条件,先查出,再删除。当然也可当作查询直接使用,例如:
@GetMapping("/user/{id}")
public User get(@PathVariable String id){
Query query=new Query(Criteria.where("_id").is(id));
return mongoTemplate.findOne(query,User.class);
}
2.4 application.yml中配置连接字符串
spring:
data:
mongodb:
# mongodb://username:password@serverIp:port/dbname
uri: "mongodb://test_admin:welcome@localhost:27017/test"
2.5 最后的项目结构如图
3.编译
这里笔者使用idea-build编译不过,必须使用mvn idea:idea命令进行编译才能通过,原因暂不明了,如果有知道的小伙伴欢迎再下面留言。
在控制台进入到mongodb的模块目录,直接输入mvn idea:idea命令即可用maven编译。
4.测试
- 单测直接跑UserTest.getAll()方法,能通过即表示测试成功。
- 也可以用postman访问/rest/user下的restful端口
5.参考
详细用法可以参考官方文档:https://docs.spring.io/spring-data/mongodb/docs/2.2.7.RELEASE/reference/html/#reference