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

SpringBoot项目中,controller 、 entity、mapper和service包的介绍

在Spring Boot项目中,mapperservicecontroller 和 entity 是标准的代码分层目录,每个目录有明确的职责划分。以下是它们的详细说明和文件存储规范:


1. controller 目录

  • 作用:存放 ​控制器类​(接收HTTP请求并返回响应)。
  • 文件类型
    • 普通Java类(.java文件)
  • 关键注解
    • @RestController(REST API)
    • @Controller(传统MVC)
    • @RequestMapping@GetMapping
  • 示例
     
    // src/main/java/com/example/controller/UserController.java
    @RestController
    @RequestMapping("/api/users")
    public class UserController {
        @Autowired
        private UserService userService;
    
        @GetMapping
        public List<User> listUsers() {
            return userService.getAllUsers();
        }
    }


2. service 目录

  • 作用:存放 ​业务逻辑层代码​(处理复杂业务规则)。
  • 文件类型
    • 接口(UserService.java
    • 实现类(UserServiceImpl.java,放在impl子目录下)
  • 关键注解
    • @Service(标记实现类)
  • 示例
     
    // src/main/java/com/example/service/UserService.java
    public interface UserService {
        List<User> getAllUsers();
    }
    
    // src/main/java/com/example/service/impl/UserServiceImpl.java
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserMapper userMapper;
    
        @Override
        public List<User> getAllUsers() {
            return userMapper.selectAll();
        }
    }

3. mapper 目录

  • 作用:存放 ​数据访问层接口​(直接操作数据库的代码)。
  • 文件类型
    • 接口(.java文件)
    • 配套的XML映射文件(MyBatis)或使用JPA接口
  • 关键注解
    • @Mapper(MyBatis)
    • @Repository(可选,Spring会自动识别)
  • 示例
     
    // src/main/java/com/example/mapper/UserMapper.java
    @Mapper
    public interface UserMapper {
        List<User> selectAll();
        User selectById(Long id);
    }
    
    <!-- src/main/resources/mapper/UserMapper.xml -->
    <mapper namespace="com.example.mapper.UserMapper">
        <select id="selectAll" resultType="com.example.entity.User">
            SELECT * FROM t_user
        </select>
    </mapper>


4. entity 目录

  • 作用:存放 ​数据实体类​(与数据库表直接映射的Java对象)。
  • 文件类型
    • 普通Java类(.java文件)
    • 使用注解标记与数据库的映射关系(如JPA或MyBatis注解)
  • 关键注解
    • @Entity(JPA)
    • @Table(name = "表名")
    • @Id(主键)
  • 示例
    // src/main/java/com/example/entity/User.java
    @Entity
    @Table(name = "t_user")
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String username;
        // getter/setter省略
    }

分层架构流程图

flowchart LR
    Client --> Controller --> Service --> Mapper --> Database
    Database --> Entity

各层职责总结

目录职责是否必须典型依赖
entity定义数据结构
mapper数据库CRUD操作entity
service业务逻辑处理推荐mapper + 其他Service
controller处理HTTP请求/响应service

最佳实践建议

  1. 严格分层调用

    • Controller → Service → Mapper
    • 禁止跨层调用​(如Controller直接调用Mapper)
  2. 命名规范

    • 实体类:User.java
    • Mapper接口:UserMapper.java
    • Service接口:UserService.java
    • Service实现类:UserServiceImpl.java
    • Controller:UserController.java
  3. 使用接口分离

    • Service和Mapper层建议使用接口+实现类的形式,便于扩展和Mock测试。

通过这种分层设计,代码可维护性和可测试性会显著提升。


http://www.kler.cn/a/613488.html

相关文章:

  • 4、网工软考—VLAN配置—hybird配置
  • 【C++】模拟实现一颗二叉搜索树
  • LeeCode 434. 字符串中的单词数
  • MySQL(数据表创建)
  • Paddlex服务化代理处理跨域、替换Response中Json key
  • 【质量管理】防错(POKA-YOKE)的概念、特点和作用解析
  • 3、fabric实现多机多卡训练
  • PoE交换机如何助力智慧城市基础设施建设?
  • Nginx RTMP DASH 模块分析 (ngx_rtmp_dash_module.c)
  • 基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】
  • 认识一家公司:瑞芯微(Rockchip Electronics Co., Ltd.)以及旗下的两款芯片RK3288\RK3588
  • PHP接口开发:从基础到高级的全面指南
  • 【强化学习】基于深度强化学习的微能源网能量管理与优化策略研究【Python】
  • 调用阿里云API实现快递地址解析
  • 力扣hot100——搜索二维矩阵
  • Android读写权限分析
  • MFC(1)-odbc-ado-调用mysql,sqlserver
  • AI大模型从0到1记录学习 day08
  • Go 语言标准库中encoding/xml模块详细功能介绍与示例
  • 【QT5 多线程示例】异步编程