Spring Boot 实战
快速开始
Spring Boot 让创建 Spring 应用变得简单。
java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}RESTful API
创建一个简单的 RESTful API 控制器。
java
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
return userService.save(user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteById(id);
}
}依赖注入
使用 Spring 的依赖注入功能。
java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 方式二:构造器注入(推荐)
private final EmailService emailService;
public UserService(EmailService emailService) {
this.emailService = emailService;
}
// 方式三:Setter 注入
private SMSService smsService;
@Autowired
public void setSmsService(SMSService smsService) {
this.smsService = smsService;
}
}分层架构
典型的 Spring Boot 分层架构:
Controller (控制层)
↓
Service (业务逻辑层)
↓
Repository/DAO (数据访问层)
↓
Database (数据库)java
// Entity 实体类
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// getters and setters
}
// Repository 数据访问层
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByUsername(String username);
}
// Service 业务逻辑层
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public User save(User user) {
return userRepository.save(user);
}
}
// Controller 控制层
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
}配置文件
application.yml
yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
logging:
level:
root: INFO
com.example: DEBUG异常处理
全局异常处理。
java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleResourceNotFound(
ResourceNotFoundException ex) {
ErrorResponse error = new ErrorResponse(
"NOT_FOUND",
ex.getMessage()
);
return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleGenericException(
Exception ex) {
ErrorResponse error = new ErrorResponse(
"INTERNAL_SERVER_ERROR",
"服务器内部错误"
);
return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
