2025-03-18    2025-03-18    1647 字  4 分钟

1.项目回顾

上一篇我们使用容器搭建了mongo数据库并创建了具有读写操作的用户,本篇我们将使用idea工具创建springboot项目和mongo数据库结合起来。

2.使用idea创建springboot项目

2.1 代码结构如下

项目层级-min.webp

打开idea,File->new->Project->Spring Initializr。Type选择maven,JDK选择17,然后点击next。

springboot1-min.webp

左侧勾选Spring Web,然后点击create。

springboot2-min.webp

2.2 idea创建package方式

右键项目名(spring-boot2),选择new,选择package。

2.3 idea创建class(类)方式

右键package,选择new,选择class。

2.4 idea创建interface(接口)方式

右键package,选择new,选择class,在下拉菜单里选择interface。

springboot3-min.webp

2.5 项目准备

使用上篇文章中搭建的mongo数据库。

2.5.1 引入相关依赖

主要的依赖为WebMongoDBstarter,把下面代码加入到pom.xml中即可:

注意:每次引入新依赖都需要点击右上角齿轮按钮重新加载下环境。

1
2
3
4
5
6
7
8
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这些依赖可以访问这里来查询。

2.5.2 配置数据库连接信息

配置在application.properties中如下:

1
2
3
4
5
6
7
8
server.port=8080

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=testdb
spring.data.mongodb.username=user
spring.data.mongodb.password=123456
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

2.5.3 创建数据模型实体

创建User类:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.fast.springboot2.model;
import org.springframework.data.annotation.Id;
import java.util.Date;

public class User {
    @Id
    private String userId;
    private String name;
    private Integer age;
    private Date creatTime = new Date();
    public String getUserId(){
        return userId;
    }
    public void setUserId(String userId){
       this.userId = userId;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){

        this.name = name;
    }
    public Integer getAge(){
        return age;
    }
    public void setAge(Integer age){
        this.age = age;
    }
    public Date getCreatTime(){
        return creatTime;
    }
    public void setCreatTime(Date creatTime){
        this.creatTime = creatTime;
    }

}

不需要在MongoDB中创建对应的Collections(表),当通过Web应用新增时会自动创建。

2.6 代码编写

方式1:MongoRepository

定义数据访问层UserRepository

Repository实际就是用于操作数据库的类。在非关系型数据库MongoDB的整合中,也是一样的。Spring会帮我们实现好对应接口的方法,开发人员连SQL都不用写,非常省心。代码如下:

1
2
3
4
5
6
7
8
package com.fast.springboot2.dal;
import com.fast.springboot2.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends MongoRepository<User, String>{

}

注意MongoRepository后面接的泛型<User, String>第一个为实体类,第二个为主键ID

实现Controller

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.fast.springboot2.controller;

import com.fast.springboot2.dal.UserRepository;
import com.fast.springboot2.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private final UserRepository userRepository;
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    @GetMapping("")
    public List<User> getAllUsers(){
        return userRepository.findAll();
    }

    @GetMapping("/{userId}")
    public User getByUserId(@PathVariable String userId) {
        return userRepository.findById(userId).orElse(new User());
    }
    @PostMapping("")
    public User addNewUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @DeleteMapping("/{userId}")
    public String delete(@PathVariable String userId){
        User user = new User();
        user.setUserId(userId);
        userRepository.deleteById(userId);
        return "deleted: " + userId;
    }
    @PutMapping("")
    public User update(@RequestBody User user){

        return userRepository.save(user);
    }
}

注意代码没有做异常情况的判断和处理。

方式2:MongoTemplate

先定义接口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.fast.springboot2.dal;
import com.fast.springboot2.model.User;
import java.util.List;

public interface UserDAL {
    List<User> findAll();
    User findById(String userid);
    User save(User user);
    void deleteById(String userid);

}

实现接口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.fast.springboot2.dal;
import com.fast.springboot2.model.User;
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.stereotype.Repository;
import java.util.List;

@Repository
public class UserDALImpl implements UserDAL {
    @Autowired
    private MongoTemplate template;

    @Override
    public List<User> findAll() {
        return template.findAll(User.class);
    }

    @Override
    public User findById(String userId) {
        return template.findById(userId,User.class);
    }

    @Override
    public User save(User user) {
        return template.save(user);
    }

    @Override
    public void deleteById(String userId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(userId));
        template.remove(query, User.class);
    }
}

实现另外一个Controller

这个Controller的代码与之前的基本一样,只是数据访问类不一样,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.fast.springboot2.controller;
import com.fast.springboot2.dal.UserDAL;
import com.fast.springboot2.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/userTemplate")
public class UserTemplateController {
    @Autowired
    private final UserDAL userDAL;

    public UserTemplateController(UserDAL userDAL) {
        this.userDAL = userDAL;
    }


    @GetMapping("")
    public List<User> getAllUsers() {
        return userDAL.findAll();
    }

    @GetMapping("/{userId}")
    public User getByUserId(@PathVariable String userId) {
        return userDAL.findById(userId);
    }

    @PostMapping("")
    public User addNewUser(@RequestBody User user) {
        return userDAL.save(user);
    }

    @DeleteMapping("/{userId}")
    public String delete(@PathVariable String userId) {
        User user = new User();
        user.setUserId(userId);
        userDAL.deleteById(userId);
        return "deleted: " + userId;
    }

    @PutMapping("")
    public User update(@RequestBody User user) {
        return userDAL.save(user);
    }
}

3.测试

在idea中运行代码将项目跑起来

找到程序入口(Springboot2Application),右键选择Run “Springboot2Application”。项目运行情况会显示在底部控制台中,数据库是否连接成功也会在此处显示。

Postman测试后,每个接口均调用成功。

测试接口连接:

  1. locahhost:8080/user

  2. localhost:8080/userTemplate

测试方法见这篇文章