1.项目回顾
上一篇我们使用容器搭建了mongo数据库并创建了具有读写操作的用户,本篇我们将使用idea工具创建springboot项目和mongo数据库结合起来。
2.使用idea创建springboot项目
2.1 代码结构如下

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

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

2.2 idea创建package方式
右键项目名(spring-boot2),选择new,选择package。
2.3 idea创建class(类)方式
右键package,选择new,选择class。
2.4 idea创建interface(接口)方式
右键package,选择new,选择class,在下拉菜单里选择interface。

2.5 项目准备
使用上篇文章中搭建的mongo数据库。
2.5.1 引入相关依赖
主要的依赖为Web
和MongoDB
的starter
,把下面代码加入到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
测试后,每个接口均调用成功。
测试接口连接:
locahhost:8080/user
localhost:8080/userTemplate
测试方法见这篇文章