在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测试。
通过这种分层设计,代码可维护性和可测试性会显著提升。