springboot后端接口设计,从实体类型的定义到对外接口的实现

📚 专业术语解释:
✅ 一、整体设计流程图
┌──────────────┐
│ domain 层 │ ← 实体类(与数据库表一一对应)
└────┬─────────┘
↓
┌──────────────┐
│ repository 层│ ← 接口操作数据库(JPA)
└────┬─────────┘
↓
┌──────────────┐
│ service 层 │ ← 编写业务逻辑(可以事务控制)
└────┬─────────┘
↓
┌──────────────┐
│controller 层 │ ← 对外接口(前端访问用)
└──────────────┘
✅ 二、各层作用及编写步骤
1️⃣ domain 层:实体类定义
- 作用:定义数据库中的表结构映射。
- 位置:
com.example.xxx.domain
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
private String userEmail;
private String userPassword;
private String userName;
private Integer userFans;
// Getter & Setter or @Data
}
☑ 实体类会自动映射为数据库表,字段即列。
2️⃣ repository 层:数据访问接口
- 作用:提供基础的数据库 CRUD 操作。
- 位置:
com.example.xxx.repository
- 通常继承
JpaRepository<T, ID>。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findUserByUserEmailAndUserPassword(String email, String password);
}
☑ Spring Data JPA 会自动根据方法名生成 SQL,无需自己写。
3️⃣ service 层:业务逻辑处理
- 作用:封装业务逻辑,对外暴露服务。
- 包含接口和实现类两个部分。
- 位置:
com.example.xxx.service 和 service.impl
接口:
public interface UserService {
User userLogin(String email, String password);
User userRegister(User user);
Page<User> findHotUser(Integer page, Integer size);
}
实现类:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User userLogin(String email, String password) {
return userRepository.findUserByUserEmailAndUserPassword(email, password);
}
@Override
@Transactional
public User userRegister(User user) {
return userRepository.save(user);
}
@Override
public Page<User> findHotUser(Integer page, Integer size) {
Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "userFans");
return userRepository.findAll(pageable);
}
}
☑ 可加事务注解 @Transactional,避免数据不一致问题。
4️⃣ controller 层:对外提供接口
- 作用:定义前端访问的 HTTP 接口。
- 位置:
com.example.xxx.controller
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody User user) {
User result = userService.userLogin(user.getUserEmail(), user.getUserPassword());
if (result != null) {
return ResponseEntity.ok(result);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("邮箱或密码错误");
}
}
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody User user) {
return ResponseEntity.ok(userService.userRegister(user));
}
@GetMapping("/hot")
public ResponseEntity<Page<User>> hotUsers(@RequestParam int page, @RequestParam int size) {
return ResponseEntity.ok(userService.findHotUser(page, size));
}
}
✅ 三、目录结构建议
src/main/java/com/example/_S_Hub_Backend/
├── controller/
│ └── UserController.java
├── service/
│ ├── UserService.java
│ └── impl/UserServiceImpl.java
├── repository/
│ └── UserRepository.java
├── domain/
│ └── User.java
springboot后端接口设计,从实体类型的定义到对外接口的实现
📚 专业术语解释:
✅ 一、整体设计流程图
✅ 二、各层作用及编写步骤
1️⃣
domain层:实体类定义com.example.xxx.domain2️⃣
repository层:数据访问接口com.example.xxx.repositoryJpaRepository<T, ID>。3️⃣
service层:业务逻辑处理com.example.xxx.service和service.impl接口:
实现类:
4️⃣
controller层:对外提供接口com.example.xxx.controller✅ 三、目录结构建议