当前位置: 首页 > news >正文

springboot项目结构

基于 Maven/Gradle 构建规范,各包(目录)的职责和作用如下,按分层架构设计来分工:

1. 最外层基础目录

  • src/main/java
    核心代码存放根目录,所有 Java 源码(.java 文件)都在这里,编译、运行的核心逻辑围绕它展开。

2. 业务包结构(com.example.calccraft 下的子包)

  • config

    • 作用:存放配置类 ,比如 Spring Boot 的 @Configuration 类,用来配置数据库连接、Redis、拦截器、跨域、Swagger 等全局设置。
    • 示例:RedisConfig.java 配置 Redis 客户端,WebMvcConfig.java 注册拦截器、配置视图解析器。
  • controller

    • 作用:控制层 ,负责接收前端请求(HTTP)、参数校验、调用 Service 处理业务,最后返回响应(JSON/页面) 。是前后端交互的“入口”。
    • 示例:UserController.java 里写 @GetMapping("/user") 接口,处理用户查询逻辑。
  • dto(Data Transfer Object)

    • 作用:数据传输对象 ,用于前后端、服务间传递数据的“容器” 。比如前端传复杂参数、接口返回给前端的定制化数据结构,避免直接用 Entity 暴露数据库细节。
    • 示例:UserDTO.java 可能包含 usernamenickname ,但不含数据库字段 password
  • entity(也叫 model、domain)

    • 作用:实体类 ,映射数据库表结构(或其他数据源结构) ,每个字段对应表的一列,通常搭配 ORM 框架(MyBatis、JPA)使用。
    • 示例:UserEntity.javaidusernamepassword 对应数据库 user 表的字段。
  • interceptor

    • 作用:存放拦截器 ,用于拦截 HTTP 请求,实现统一的逻辑:比如登录校验、接口耗时统计、参数统一处理等 ,配合 config 里的配置生效。
    • 示例:LoginInterceptor.java 拦截请求,检查 token 是否合法。
  • mapper(也可能叫 dao)

    • 作用:数据访问层 ,MyBatis 场景下是 Mapper 接口 + XML(或注解) ,定义数据库操作(增删改查 SQL) ;JPA 场景下可能是继承 JpaRepository 的接口。负责直接操作数据库。
    • 示例:UserMapper.java@Select("select * from user where id=#{id}") ,或通过 XML 配 SQL。
  • service

    • 作用:业务逻辑层 ,封装核心业务逻辑,组合 Mapper 做数据操作,处理复杂业务流程(比如“下单”要校验库存、扣减、生成订单等步骤) ,供 Controller 调用。
    • 示例:UserService.javagetUserById() 调用 UserMapper 查询,可能还会做缓存、权限校验。
  • util

    • 作用:工具类包 ,存放通用工具方法:比如加密解密(CryptoUtil)、日期处理(DateUtil)、HTTP 工具、枚举常量等 ,让业务代码更简洁,避免重复造轮子。

3. 启动类(CalcCraftApplication

  • 作用:Spring Boot 项目的启动入口 ,带 @SpringBootApplication 注解,运行它会启动整个 Spring 容器,扫描包、加载配置、初始化 Bean 等。

这种分层结构的核心是 “高内聚、低耦合” :每层专注自己的职责,修改业务逻辑只动 service ,改接口入参只动 dto ,方便维护和协作开发 。如果是 Spring Cloud 等分布式场景,结构会更复杂(加 clientfeign 等包),但基础分层逻辑一致。

http://www.xdnf.cn/news/1352773.html

相关文章:

  • leetcode80:删除有序数组中的重复项 II(快慢指针法)
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(6):51-60语法
  • Day33 MLP神经网络的训练
  • 「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日
  • 前端 H5分片上传 vue实现大文件
  • 【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
  • piclist+gitee操作指南
  • 【Day 11】238.除自身以外数组的乘积
  • Transformer核心概念I-token
  • SpringBoot 快速上手:从环境搭建到 HelloWorld 实战
  • Excel 条件高亮工具,秒高亮显示符合筛选条件的行数据
  • 「数据获取」《中国能源统计年鉴》(1986-2023)(获取方式看绑定的资源)
  • 蓝桥杯算法之基础知识(2)——Python赛道
  • 【51单片机学习】直流电机驱动(PWM)、AD/DA、红外遥控(外部中断)
  • mmdetection:记录算法训练配置文件
  • A Large Scale Synthetic Graph Dataset Generation Framework的学习笔记
  • Mysql EXPLAIN详解:从底层原理到性能优化实战
  • 如何在Ubuntu中删除或修改已有的IP地址设置?
  • C语言---数据类型
  • PyTorch生成式人工智能——VQ-VAE详解与实现
  • TypeScript 的泛型(Generics)作用理解
  • Kafka 概念与概述
  • 在TencentOS3上部署OpenTenBase:从入门到实战的完整指南
  • 【Java学习笔记】18.反射与注解的应用
  • 遥感机器学习入门实战教程|Sklearn案例⑧:评估指标(metrics)全解析
  • tcpdump命令打印抓包信息
  • 【golang】ORM框架操作数据库
  • 2-5.Python 编码基础 - 键盘输入
  • STM32CubeIDE V1.9.0下载资源链接
  • 醋酸镨:催化剂领域的璀璨新星