Mapper 和 Service 的工作流程就像工厂里的“原材料采购”和“产品加工”环节,配合起来完成从“数据获取”到“业务实现”的全流程,具体可以分为以下几步:
完整工作流程(以“用户分页查询”为例):
1. 前端发起请求
用户在网页上点击“查看第2页用户,每页10条”,前端把请求(pageNum=2&pageSize=10)发给后端的 Controller(控制器)。
2. Controller 接收请求,调用 Service
Controller 像“调度员”,收到请求后不做具体处理,直接把任务交给 Service(业务层):
@Controller
public class UserController {
@Autowired
private UserService userService;
// 接收分页查询请求
@GetMapping("/users")
public String getUsers(Integer pageNum, Integer pageSize, Model model) {
// 调用 Service 处理业务
PageInfo<User> pageInfo = userService.findByPage(pageNum, pageSize);
// 把结果传给视图展示
model.addAttribute("pageInfo", pageInfo);
return "userList";
}
}
3. Service 处理业务逻辑,调用 Mapper 获取原始数据
Service 像“加工车间”,先做业务判断,再调用 Mapper 拿“原材料”(数据库原始数据):
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; // 依赖 Mapper
@Override
public PageInfo<User> findByPage(Integer pageNum, Integer pageSize) {
// 业务处理1:校验参数(比如页码不能小于1)
if (pageNum == null || pageNum < 1) {
pageNum = 1;
}
if (pageSize == null || pageSize < 1) {
pageSize = 10;
}
// 业务处理2:初始化分页插件
PageHelper.startPage(pageNum, pageSize);
// 调用 Mapper 获取原始数据(从数据库查所有用户)
List<User> userList = userMapper.selectAll();
// 业务处理3:包装成分页结果(含总页数、总条数等)
return new PageInfo<>(userList);
}
}
4. Mapper 执行 SQL,从数据库取数据
Mapper 像“采购员”,接到 Service 的指令后,直接去数据库“采购”原始数据:
-
接口定义(UserMapper.java):声明要执行的操作
@Mapper
public interface UserMapper {
// 声明“查询所有用户”的操作
List<User> selectAll();
} -
SQL 实现(UserMapper.xml):执行具体的 SQL
<mapper namespace="com.example.mapper.UserMapper">
<!– 执行“查所有用户”的 SQL,返回原始数据 –>
<select id="selectAll" resultType="User">
select * from user
</select>
</mapper>执行后,数据库返回所有用户的原始列表(比如100条数据)。
5. 数据从 Mapper 回到 Service,完成业务加工
Mapper 把从数据库查到的 100 条用户数据返回给 Service,Service 用分页插件处理后,只保留第2页的10条数据(第11-20条),并计算出总页数(10页)、总条数(100条)等信息,包装成 PageInfo 对象。
6. Service 把结果返回给 Controller,最终展示给用户
Service 把处理好的分页结果(PageInfo)返回给 Controller,Controller 再传给前端视图,最终网页上展示“第2页的10条用户数据”和分页按钮(上一页、下一页等)。
流程总结:
前端请求 → Controller(调度)→ Service(业务处理)→ Mapper(查数据库)→ 数据库
↓
前端展示 ← Controller(传结果)← Service(加工数据)← Mapper(返回原始数据)
- Mapper 只做一件事:执行 SQL 从数据库拿原始数据,是“数据入口”。
- Service 核心职责:调用 Mapper 拿数据,然后按业务规则加工(验证、计算、过滤等),是“业务核心”。
- 两者配合:通过“Service 调用 Mapper”的方式,实现“数据获取→业务处理”的完整流程,既分工明确又协同工作。
评论前必须登录!
注册