下面是一个完整的 **Spring Boot** 框架应用示例,包含 **入口、控制器、配置、业务逻辑、数据访问、实体类** 以及 **其他辅助功能(日志)**。
---
### **1. 入口(主应用类)**:src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
// 导入 Spring Boot 相关的核心类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// @SpringBootApplication 是 Spring Boot 的核心注解,表示这是一个 Spring Boot 应用
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// 启动 Spring Boot 应用
SpringApplication.run(DemoApplication.class, args);
}
}
---
### **2. 实体类(Model/Entity)**:src/main/java/com/example/demo/model/User.java
package com.example.demo.model;
// 导入 JPA 相关的注解
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
// @Entity 表示该类是一个数据库实体
@Entity
public class User {
// @Id 表示主键,@GeneratedValue 让 ID 自动递增
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// 无参构造函数(JPA 需要)
public User() {}
// 带参数的构造函数
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getter 和 Setter 方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
---
### **3. 数据访问层(Repository)**:src/main/java/com/example/demo/repository/UserRepository.java
package com.example.demo.repository;
// 导入 Spring Data JPA 相关的类
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
// @Repository 表示该接口是一个数据访问层
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// JpaRepository 提供了基本的 CRUD 操作
}
---
### **4. 业务逻辑层(Service)**:src/main/java/com/example/demo/service/UserService.java
package com.example.demo.service;
// 导入相关类
import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
// @Service 表示该类是业务逻辑层
@Service
public class UserService {
private final UserRepository userRepository;
// 通过构造函数注入 UserRepository
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 获取所有用户
public List<User> getAllUsers() {
return userRepository.findAll();
}
// 根据 ID 获取用户
public Optional<User> getUserById(Long id) {
return userRepository.findById(id);
}
// 添加新用户
public User addUser(User user) {
return userRepository.save(user);
}
// 删除用户
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
---
### **5. 控制器(Controller)**:src/main/java/com/example/demo/controller/UserController.java
package com.example.demo.controller;
// 导入相关类
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
// @RestController 表示该类是一个控制器,返回 JSON 数据
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
// 通过构造函数注入 UserService
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
// 获取所有用户
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
// 根据 ID 获取用户
@GetMapping("/{id}")
public Optional<User> getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
// 添加新用户
@PostMapping
public User addUser(@RequestBody User user) {
return userService.addUser(user);
}
// 删除用户
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}
---
### **6. 配置文件(application.properties)**:src/main/resources/application.properties
# 配置 H2 数据库(内存数据库)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
---
### **7. 其他辅助功能(日志)**:src/main/java/com/example/demo/aspect/LoggingAspect.java
package com.example.demo.aspect;
// 导入相关类
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
// @Aspect 表示该类是一个切面
@Aspect
@Component
public class LoggingAspect {
// 在 UserService 的所有方法执行前打印日志
@Before("execution(* com.example.demo.service.UserService.*(..))")
public void logBeforeMethodExecution() {
System.out.println("执行 UserService 方法...");
}
}
---
### **8. Maven 依赖(pom.xml)**:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot JPA 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- H2 数据库 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot AOP 依赖(用于日志) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
</project>
---
### **总结**
这个示例完整展示了一个 **Spring Boot** 框架应用,包含:
- **入口**:`DemoApplication.java`
- **实体类**:`User.java`
- **数据访问层**:`UserRepository.java`
- **业务逻辑层**:`UserService.java`
- **控制器**:`UserController.java`
- **配置文件**:`application.properties`
- **日志(AOP 切面)**:`LoggingAspect.java`
- **Maven 依赖**:`pom.xml`
运行后,你可以通过 **REST API** 访问用户数据,例如:
- `GET /api/users` 获取所有用户
- `POST /api/users` 添加用户
- `GET /api/users/{id}` 获取指定用户
- `DELETE /api/users/{id}` 删除用户
这个示例适合初学者理解 **Spring Boot** 框架的基本结构和使用方式。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |