我的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::port/dbname
      uri: "mongodb://test_admin::27017/test"

2.5 最后的项目结构如图

我的spring-boot-study之mongodb的应用

3.编译

这里笔者使用idea-build编译不过,必须使用mvn idea:idea命令进行编译才能通过,原因暂不明了,如果有知道的小伙伴欢迎再下面留言。
在控制台进入到mongodb的模块目录,直接输入mvn idea:idea命令即可用maven编译。

4.测试

  • 单测直接跑UserTest.getAll()方法,能通过即表示测试成功。
  • 也可以用postman访问/rest/user下的restful端口