You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SpringBoot中不使用联表查询从Leave与CompOff表获取数据并合并为员工请求列表返回前端

整合Leave和CompOff数据返回统一请求列表的解决方案

嗨,我来帮你搞定这个在SpringBoot里整合请假(Leave)和补休(CompOff)数据的问题!咱们可以通过统一转换为Request对象+合并列表的方式来实现,一步步来:

1. 先调整Request实体类

首先,咱们的Request类需要能容纳两种请求的共同信息,还要能区分请求类型。建议给它加上这些字段:

  • empid:员工ID
  • createdOn:请求创建时间
  • requestType:请求类型(比如"LEAVE"或"COMP_OFF",方便前端区分)

示例代码:

public class Request {
    private Long empid;
    private LocalDate createdOn;
    private String requestType;

    // 构造器、getter、setter
    public Request(Long empid, LocalDate createdOn, String requestType) {
        this.empid = empid;
        this.createdOn = createdOn;
        this.requestType = requestType;
    }

    // 省略getter和setter
}

另外注意:你的数据库字段写的是ceated_on,应该是拼写错误,建议改成created_on,同时Leave和CompOff实体类里对应的字段也要修正(比如用@Column(name = "created_on")做数据库映射)。

2. 定义数据访问层(Repository)

给Leave和CompOff分别创建JpaRepository,用来获取对应表的数据:

// LeaveRepository
public interface LeaveRepository extends JpaRepository<Leave, Long> {
    // 可选:按员工ID查询请假记录
    List<Leave> findByEmpid(Long empid);
}

// CompOffRepository
public interface CompOffRepository extends JpaRepository<CompOff, Long> {
    // 可选:按员工ID查询补休记录
    List<CompOff> findByEmpid(Long empid);
}

3. 业务层实现数据整合

在业务类(比如RequestService)里,咱们要完成三件核心事:

  • 从两个Repository拉取原始数据
  • 把Leave和CompOff对象分别转换成统一的Request对象
  • 合并两个列表(还可以按创建时间排序,提升前端展示体验)

示例代码:

@Service
public class RequestService {

    @Autowired
    private LeaveRepository leaveRepository;
    @Autowired
    private CompOffRepository compOffRepository;

    // 获取所有员工的请求列表
    public List<Request> getAllRequests() {
        // 转换请假数据为Request对象
        List<Request> leaveRequests = leaveRepository.findAll().stream()
                .map(leave -> new Request(
                        leave.getEmpid(),
                        leave.getCreatedOn(),
                        "LEAVE"
                ))
                .collect(Collectors.toList());

        // 转换补休数据为Request对象
        List<Request> compOffRequests = compOffRepository.findAll().stream()
                .map(compOff -> new Request(
                        compOff.getEmpid(),
                        compOff.getCreatedOn(),
                        "COMP_OFF"
                ))
                .collect(Collectors.toList());

        // 合并列表并按创建时间倒序排序(最新请求在前)
        return Stream.concat(leaveRequests.stream(), compOffRequests.stream())
                .sorted(Comparator.comparing(Request::getCreatedOn).reversed())
                .collect(Collectors.toList());
    }

    // 可选:获取单个员工的请求列表
    public List<Request> getRequestsByEmpid(Long empid) {
        List<Request> leaveRequests = leaveRepository.findByEmpid(empid).stream()
                .map(leave -> new Request(leave.getEmpid(), leave.getCreatedOn(), "LEAVE"))
                .collect(Collectors.toList());

        List<Request> compOffRequests = compOffRepository.findByEmpid(empid).stream()
                .map(compOff -> new Request(compOff.getEmpid(), compOff.getCreatedOn(), "COMP_OFF"))
                .collect(Collectors.toList());

        return Stream.concat(leaveRequests.stream(), compOffRequests.stream())
                .sorted(Comparator.comparing(Request::getCreatedOn).reversed())
                .collect(Collectors.toList());
    }
}

4. 控制器层提供接口给前端

写一个RestController,暴露接口让前端获取整合后的请求列表:

@RestController
@RequestMapping("/api/requests")
public class RequestController {

    @Autowired
    private RequestService requestService;

    // 获取所有请求
    @GetMapping
    public ResponseEntity<List<Request>> getAllRequests() {
        List<Request> requests = requestService.getAllRequests();
        return ResponseEntity.ok(requests);
    }

    // 获取指定员工的请求
    @GetMapping("/{empid}")
    public ResponseEntity<List<Request>> getRequestsByEmpid(@PathVariable Long empid) {
        List<Request> requests = requestService.getRequestsByEmpid(empid);
        return ResponseEntity.ok(requests);
    }
}

这样前端调用接口后,就能拿到包含请假和补休的统一请求列表,每个条目都能通过requestType区分类型,还按时间排好序啦!

内容的提问来源于stack exchange,提问作者Harshit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:47:33