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

在Spring Boot项目中,mapper、service、controller 和 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测试。

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

相关推荐
阿俊-全栈开发6 小时前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
wuminyu9 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
蜗牛互联网11 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
龙亘川12 小时前
铭记英烈守初心,数字强基促服务:亘川智城退役军人服务系统的实践与价值
java·数据库·人工智能
OxYGC12 小时前
[AI工程] Spring AI 第廿一篇:存量 REST 接口的 MCP 化改造实录——工具从哪条路径注册、参数描述怎么写、身份怎么过去
java·人工智能·spring
Zhou14113612 小时前
SpringBoot_02_自动配置原理
java·spring boot·后端
FYKJ_201012 小时前
SSM校园失物招领系统41452-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·typescript·spark
kv11013 小时前
Android studio国内开发有关
java·数据库·android studio
卓怡学长13 小时前
w198基于springboot始于足下健康打卡平台的设计与实现
java·spring boot·spring·intellij-idea
阿狗童鞋13 小时前
Java并发编程实战指南
java·开发语言