在Spring Boot项目中,mapper、service、controller 和 entity 是标准的代码分层目录,每个目录有明确的职责划分。以下是它们的详细说明和文件存储规范:
1. controller 目录
- 
作用 :存放 控制器类(接收HTTP请求并返回响应)。 
- 
文件类型 : - 普通Java类(.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注解)
 
- 普通Java类(
- 
关键注解 : - @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 | 
最佳实践建议
- 
严格分层调用: - Controller → Service → Mapper
- 禁止跨层调用(如Controller直接调用Mapper)
 
- 
命名规范: - 实体类:User.java
- Mapper接口:UserMapper.java
- Service接口:UserService.java
- Service实现类:UserServiceImpl.java
- Controller:UserController.java
 
- 实体类:
- 
使用接口分离: - Service和Mapper层建议使用接口+实现类的形式,便于扩展和Mock测试。
 
通过这种分层设计,代码可维护性和可测试性会显著提升。