Spring Boot 分层架构(spring分层架构)

Spring Boot 分层架构(spring分层架构)

java

复制

下载

// 主应用入口 - 启用自动配置和组件扫描

@SpringBootApplication

public class EcommerceApplication {

public static void main(String[] args) {

SpringApplication.run(EcommerceApplication.class, args);

}

}

// 领域模型 - 核心业务对象

@Entity

@Data

@NoArgsConstructor

public class Product {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

private String description;

private BigDecimal price;

private Integer stock;

}

// 数据访问层 - 数据库操作

@Repository

public interface ProductRepository extends JpaRepository<Product, Long> {

List<Product> findByPriceBetween(BigDecimal min, BigDecimal max);

}

// 服务层 - 业务逻辑

@Service

@Transactional

public class ProductService {

private final ProductRepository productRepository;

@Autowired

public ProductService(ProductRepository productRepository) {

this.productRepository = GAME.HUoCheNGrM.Cn/2025-08-10-00-19-184bo.html

productRepository;

}

public Product createProduct(Product product) {

// 业务验证

if (product.getPrice().compareTo(BigDecimal.ZERO) <= 0) {

throw new GAME.HUoCheNGrM.Cn/2025-08-10-00-18-418gw.html

IllegalArgumentException("价格必须大于0");

}

return productRepository.save(product);

}

public List<Product> getProductsInPriceRange(BigDecimal min, BigDecimal max) {

return productRepository.findByPriceBetween(min, max);

}

}

// 控制器层 - REST API

@RestController

@RequestMapping("/api/products")

public class GAME.HUoCheNGrM.Cn/2025-08-10-00-18-45fm6.html

ProductController {

private final ProductService productService;

@Autowired

public ProductController(ProductService productService) {

this.productService = productService;

}

@PostMapping

@ResponseStatus(HttpStatus.CREATED)

public Product createProduct(@RequestBody Product product) {

return productService.createProduct(GAME.HUoCheNGrM.Cn/2025-08-10-00-18-2738e.html

);

}

@GetMapping

public List<Product> getProducts(

@RequestParam(required = false) BigDecimal minPrice,

@RequestParam(required = false) BigDecimal maxPrice) {

return productService.getProductsInPriceRange(

minPrice != null ? minPrice : BigDecimal.ZERO,

maxPrice != null ? maxPrice : BigDecimal.valueOf(10000)

);

}

}

// 全局异常处理

@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler GAME.HUoCheNGrM.Cn/2025-08-10-00-14-29s81.html

(IllegalArgumentException.class)

public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {

return ResponseEntity.badRequest().body(ex.getMessage());

}

}

架构说明:

  1. 分层结构:清晰分离领域模型(Entity)、数据访问(Repository)、业务逻辑(Service)、API接口(Controller)
  2. 依赖注入:通过构造器注入实现松耦合
  3. 事务管理:@Transactional注解声明式事务
  4. RESTful设计:符合HTTP语义的资源操作
  5. 全局异常处理:统一错误响应格式
  6. JPA抽象:Spring Data简化数据库操作

特别声明:[Spring Boot 分层架构(spring分层架构)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

右翼集团借“美国转折点”渗透年轻一代

【环球时报驻美国特约记者冯亚仁戴润芝环球时报记者李迅典徐嘉彤】编者的话:查理·柯克遇刺事件过去几周在美国持续发酵,并加剧社会撕裂。

右翼集团借“美国转折点”渗透年轻一代

DNF丁丁是谁?玩家眼中的“最强辅助”真面目(dnf䃼丁)

在《地下城与勇士》(DNF)的庞大职业体系中,“丁丁”一词早已超越角色代称,成为无数玩家心中的“精神图腾”。本文深度解析“丁丁”的真实身份——一名传奇男弹药大师,揭开他从萌新到巅峰的养成之路,带你读懂这位被全服尊称为“洛兰之子”的传奇人物背

DNF丁丁是谁?玩家眼中的“最强辅助”真面目(dnf䃼丁)

郑钧宠女上热搜,网友心疼刘芸?曾是情场浪子,愧对“灰姑娘”(郑钧早年)

玩得最high的阶段,几个人还互相打赌,看谁能将看得上的女孩约到一起坐一坐,而每一次赢的人都是郑钧。 多年后,郑钧在节目中回忆起他们一言不合就开撕的一地鸡毛,还说自己曾被刘芸逼着在地库里脱掉身上所有她给买的…

郑钧宠女上热搜,网友心疼刘芸?曾是情场浪子,愧对“灰姑娘”(郑钧早年)

定期校准和遵守 NR13 的重要性(制定校准规范应做到)

本文提供了有关测量仪器校准频率的实用且易于理解的指南,强调了遵守 NR13 的重要性。 1 - 仪器类型:不同的仪器有不同的公差和要求。 2 -使用频率:经常使用的仪器磨损更快,可能需要更频繁的校准; 2…

定期校准和遵守 NR13 的重要性(制定校准规范应做到)

北美富婆都爱的板鞋?网球风『穿搭』鼻祖Alo,不是『奢侈品』,却一鞋难求!(美国富婆爱上穷小子的电视剧)

对那些穿够了 Lulu 和空军的朋友来说,Alo 板鞋就是下一个值得尝鲜的选择,既能健身穿,又能日常出街。 别担心新鞋上脚会磨脚,AloYoga 板鞋的鞋口全圈都做了柔软布面包裹。 既保留了板鞋的简约与时…

北美富婆都爱的板鞋?网球风『穿搭』鼻祖Alo,不是『奢侈品』,却一鞋难求!(美国富婆爱上穷小子的电视剧)