一、创建 Spring Boot 项目
-
使用 Spring Initializr
访问 Spring Initializr,配置以下参数:- Project:Maven Project
- Language:Java
- Spring Boot:3.0.x (或最新稳定版)
- Dependencies:
- Spring Web
- Spring Data MongoDB
- Lombok (可选)
-
手动添加依赖(如果需要)
在pom.xml
中确保以下依赖存在:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
二、配置 MongoDB 连接
在src/main/resources/application.properties
中添加 MongoDB 配置:
# MongoDB连接配置
spring.data.mongodb.uri=mongodb://localhost:27017/mydb
mydb
是数据库名称,如果不存在,MongoDB 会在首次插入数据时自动创建。
三、创建实体类
在src/main/java/com/example/mongodbdemo/entity
包下创建User
类:
package com.example.mongodbdemo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "users") // 指定集合名称
public class User {
@Id // 主键标识
private String id;
private String name;
private Integer age;
private String email;
}
四、创建 Repository 接口
在src/main/java/com/example/mongodbdemo/repository
包下创建UserRepository
接口:
package com.example.mongodbdemo.repository;
import com.example.mongodbdemo.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
// 继承MongoRepository接口,提供基本的CRUD方法
public interface UserRepository extends MongoRepository<User, String> {
// 根据名称查询用户(Spring Data自动解析方法名生成查询)
List<User> findByName(String name);
// 根据年龄范围查询用户
List<User> findByAgeBetween(Integer minAge, Integer maxAge);
}
五、创建 Service 层
在src/main/java/com/example/mongodbdemo/service
包下创建UserService
接口和实现类:
// UserService.java
package com.example.mongodbdemo.service;
import com.example.mongodbdemo.entity.User;
import java.util.List;
public interface UserService {
User save(User user);
User getById(String id);
List<User> getAll();
User update(User user);
void delete(String id);
List<User> findByName(String name);
}
// UserServiceImpl.java
package com.example.mongodbdemo.service.impl;
import com.example.mongodbdemo.entity.User;
import com.example.mongodbdemo.repository.UserRepository;
import com.example.mongodbdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User save(User user) {
return userRepository.save(user);
}
@Override
public User getById(String id) {
Optional<User> optionalUser = userRepository.findById(id);
return optionalUser.orElse(null);
}
@Override
public List<User> getAll() {
return userRepository.findAll();
}
@Override
public User update(User user) {
// 先检查用户是否存在
User existingUser = getById(user.getId());
if (existingUser != null) {
// 更新字段
existingUser.setName(user.getName());
existingUser.setAge(user.getAge());
existingUser.setEmail(user.getEmail());
return userRepository.save(existingUser);
}
return null;
}
@Override
public void delete(String id) {
userRepository.deleteById(id);
}
@Override
public List<User> findByName(String name) {
return userRepository.findByName(name);
}
}
六、创建 Controller 层
在src/main/java/com/example/mongodbdemo/controller
包下创建UserController
:
package com.example.mongodbdemo.controller;
import com.example.mongodbdemo.entity.User;
import com.example.mongodbdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
// 添加用户
@PostMapping
public User save(@RequestBody User user) {
return userService.save(user);
}
// 获取单个用户
@GetMapping("/{id}")
public User getById(@PathVariable String id) {
return userService.getById(id);
}
// 获取所有用户
@GetMapping
public List<User> getAll() {
return userService.getAll();
}
// 更新用户
@PutMapping
public User update(@RequestBody User user) {
return userService.update(user);
}
// 删除用户
@DeleteMapping("/{id}")
public void delete(@PathVariable String id) {
userService.delete(id);
}
// 根据名称查询用户
@GetMapping("/search")
public List<User> findByName(@RequestParam String name) {
return userService.findByName(name);
}
}
七、测试 MongoDB 功能
-
启动 MongoDB 服务器
确保本地 MongoDB 服务器已启动:bash
mongod
-
启动 Spring Boot 应用
运行MongoDbDemoApplication
类的main
方法。 -
使用 Postman 或 curl 测试 API
-
添加用户
bash
POST http://localhost:8080/api/users { "name": "张三", "age": 25, "email": "zhangsan@example.com" }
-
获取用户
bash
GET http://localhost:8080/api/users/{id}
-
获取所有用户
bash
GET http://localhost:8080/api/users
-
更新用户
bash
PUT http://localhost:8080/api/users { "id": "{id}", "name": "张三", "age": 26, "email": "updated@example.com" }
-
删除用户
bash
DELETE http://localhost:8080/api/users/{id}
-
根据名称查询用户
bash
GET http://localhost:8080/api/users/search?name=张三
-
八、项目结构总结
plaintext
mongodb-demo/
├── src/main/java/
│ └── com/example/mongodbdemo/
│ ├── MongoDbDemoApplication.java # 主应用类
│ ├── controller/ # 控制器层
│ │ └── UserController.java
│ ├── entity/ # 实体类
│ │ └── User.java
│ ├── repository/ # 数据访问层
│ │ └── UserRepository.java
│ └── service/ # 服务层
│ ├── UserService.java
│ └── impl/
│ └── UserServiceImpl.java
└── src/main/resources/
└── application.properties # 配置文件
九、常见问题与解决方案
-
MongoDB 连接失败
- 检查 MongoDB 服务器是否运行
- 确认
application.properties
中的连接 URI 正确
-
数据插入失败
- 确保实体类字段与 MongoDB 文档字段匹配
- 检查是否有必填字段未设置
-
查询无结果
- 确认集合名称与
@Document
注解一致 - 检查查询条件是否正确
- 确认集合名称与
-
ID 字段问题
- 使用
@Id
注解标记主键字段 - MongoDB 默认使用
_id
作为主键
- 使用