Mybatis-Plus实现分页展示数据

紧接着上一篇,接下来我们实现员工管理模块。

目录

  • 1.员工管理
    • 1.1.准备工作
    • 1.2.实现功能
    • 1.3.测试功能

1.员工管理

员工模块功能同样简单,麻烦的就是涉及到的字段比较多,还需要通过员工的id获取其他的表(籍贯、政治面貌等)。员工展示涉及到分页,所以需要配置分页,十分简单,还需要新建分页公共返回实体类对象。

1.1.准备工作

分页

MyBatisPlusConfig.java

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

新建分页公共返回实体类对象

RespPageBean.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespPageBean {

    /**
     * 总条数
     */
    private Long total;
    /**
     * 数据list
     */
    private List<?> data;
}

修改pojo类,在Employee类中所有有关日期的属性上添加日期格式

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_employee")
@ApiModel(value="Employee对象", description="")
public class Employee implements Serializable {

   	......

    @ApiModelProperty(value = "出生日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate birthday;

    @ApiModelProperty(value = "入职日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate beginDate;

    @ApiModelProperty(value = "转正日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate conversionTime;

    @ApiModelProperty(value = "离职日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate notWorkDate;

    @ApiModelProperty(value = "合同起始日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate beginContract;

    @ApiModelProperty(value = "合同终止日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate endContract;

    ......

}

由于employee表中有许多外键id,这些外键id都要对应到单独的表,那么这些表对应employee实体类里面就是对象,所以我们将他作为对象放在属性里面。

在Employee表中添加对应属性

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_employee")
@ApiModel(value="Employee对象", description="")
public class Employee implements Serializable {
    
    ......

    @ApiModelProperty(value = "部门")
    @TableField(exist = false)
    private Department department;

    @ApiModelProperty(value = "职称")
    @TableField(exist = false)
    private Joblevel joblevel;

    @ApiModelProperty(value = "职位")
    @TableField(exist = false)
    private Position position;
}

1.2.实现功能

1.2.1.Mapper接口

EmployeeMapper.java

public interface EmployeeMapper extends BaseMapper<Employee> {
    /**
     * 获取所有员工(分页)
     *
     * @param page
     * @param employee
     * @param beginDateScope
     * @return
     */
    IPage<Employee> getEmployeeByPage(Page<Employee> page,
                                      @Param("employee") Employee employee,
                                      @Param("beginDateScope") LocalDate[] beginDateScope);

    /**
     * 查询员工
     *
     * @param id
     * @return
     */
    List<Employee> getEmployee(Integer id);
}

1.2.2.对应映射文件

<resultMap id="EmployeeInfo" type="com.kt.pojo.Employee" extends="BaseResultMap">
    <association property="nation" javaType="com.kt.pojo.Nation">
        <id column="nid" property="id"/>
        <result column="nname" property="name"/>
    association>
    <association property="politicsStatus" javaType="com.kt.pojo.PoliticsStatus">
        <id column="pid" property="id"/>
        <result column="pname" property="name"/>
    association>
    <association property="department" javaType="com.kt.pojo.Department">
        <id column="did" property="id"/>
        <result column="dname" property="name"/>
    association>
    <association property="joblevel" javaType="com.kt.pojo.Joblevel">
        <id column="jid" property="id"/>
        <result column="jname" property="name"/>
    association>
    <association property="position" javaType="com.kt.pojo.Position">
        <id column="posid" property="id"/>
        <result column="posname" property="name"/>
    association>
resultMap>


<select id="getEmployeeByPage" resultMap="EmployeeInfo">
    SELECT
    e.*,
    n.id AS nid,
    n.`name` AS nname,
    p.id AS pid,
    p.`name` AS pname,
    d.id AS did,
    d.`name` AS dname,
    pos.id AS posid,
    pos.`name` AS posname,
    j.id AS jid,
    j.`name` AS jname
    FROM
    t_employee e,
    t_nation n,
    t_politics_status p,
    t_department d,
    t_joblevel j,
    t_position pos
    WHERE
    e.nationId = n.id
    AND e.politicId = p.id
    AND e.departmentId = d.id
    AND e.jobLevelId = j.id
    AND e.posId = pos.id
    <if test="null!=employee.name and ''!=employee.name">
        AND e.`name` LIKE CONCAT( '%', #{employee.name}, '%' )
    if>
    <if test="null!=employee.politicId">
        AND e.politicId = #{employee.politicId}
    if>
    <if test="null!=employee.nationId">
        AND e.nationId = #{employee.nationId}
    if>
    <if test="null!=employee.jobLevelId">
        AND e.jobLevelId = #{employee.jobLevelId}
    if>
    <if test="null!=employee.posId">
        AND e.posId = #{employee.posId}
    if>
    <if test="null!=employee.engageForm and ''!=employee.engageForm">
        AND e.engageForm = #{employee.engageForm}
    if>
    <if test="null!=employee.departmentId">
        AND e.departmentId = #{employee.departmentId}
    if>
    <if test="null!=beginDateScope and 2==beginDateScope.length">
        AND e.beginDate BETWEEN #{beginDateScope[0]} AND #{beginDateScope[1]}
    if>
    ORDER BY
    e.id
select>

<select id="getEmployee" resultMap="EmployeeInfo">
    SELECT
    e.*,
    n.id AS nid,
    n.`name` AS nname,
    p.id AS pid,
    p.`name` AS pname,
    j.id AS jid,
    j.`name` AS jname,
    d.id AS did,
    d.`name` AS dname,
    pos.id AS posid,
    pos.`name` AS posname
    FROM
    t_employee e,
    t_nation n,
    t_politics_status p,
    t_department d,
    t_joblevel j,
    t_position pos
    WHERE
    e.nationId = n.id
    AND e.politicId = p.id
    AND e.departmentId = d.id
    AND e.jobLevelId = j.id
    AND e.posId = pos.id
    <if test="null!=id">
        AND e.id = #{id}
    if>
    ORDER BY
    e.id
select>

1.2.3.服务类

IEmployeeService.java

public interface IEmployeeService extends IService<Employee> {
    /**
     * 获取所有员工(分页)
     *
     * @param currentPage
     * @param size
     * @param employee
     * @param beginDateScope
     * @return
     */
    RespPageBean getEmployeeByPage(Integer currentPage, Integer size, Employee employee, LocalDate[] beginDateScope);

    /**
     * 获取工号
     *
     * @return
     */
    RespBean maxWorkID();

    /**
     * 添加员工
     *
     * @param employee
     * @return
     */
    RespBean addEmp(Employee employee);

    /**
     * 查询员工
     * @param id
     * @return
     */
    List<Employee> getEmployee(Integer id);
}

1.2.4.服务实现类

EmployeeServiceImpl.java

@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {
    @Resource
    private EmployeeMapper employeeMapper;

    @Override
    public RespPageBean getEmployeeByPage(Integer currentPage, Integer size, Employee employee, LocalDate[] beginDateScope) {
        // 开启分页
        Page<Employee> page = new Page<>(currentPage, size);
        IPage<Employee> employeeByPage = employeeMapper.getEmployeeByPage(page, employee, beginDateScope);
        RespPageBean respPageBean = new RespPageBean(employeeByPage.getTotal(), employeeByPage.getRecords());
        return respPageBean;
    }

    @Override
    public RespBean maxWorkID() {
        List<Map<String, Object>> maps = employeeMapper.selectMaps(new QueryWrapper<Employee>().select("max(workID)"));
        return RespBean.success(null,
                String.format("%08d", Integer.parseInt(maps.get(0).get("max(workID)").toString()) + 1));
    }
    
    @Override
    public RespBean addEmp(Employee employee) {
        // 处理合同期限,保留2位小数
        LocalDate beginContract = employee.getBeginContract();
        LocalDate endContract = employee.getEndContract();
        long days = beginContract.until(endContract, ChronoUnit.DAYS);
        DecimalFormat decimalFormat = new DecimalFormat("##.00");
        employee.setContractTerm(Double.parseDouble(decimalFormat.format(days / 365.00)));
        if (1 == employeeMapper.insert(employee)) {
            return RespBean.success("添加成功!");
        }
        return RespBean.error("添加失败!");
    }

    @Override
    public List<Employee> getEmployee(Integer id) {
        return employeeMapper.getEmployee(id);
    }
}

1.2.5.控制层

EmployeeController.java

@RestController
@RequestMapping("/employee/basic")
public class EmployeeController {

    @Resource
    private IEmployeeService employeeService;
    @Resource
    private IPositionService positionService;
    @Resource
    private IDepartmentService departmentService;
    @Resource
    private IJoblevelService joblevelService;
    @Resource
    private INationService nationService;
    @Resource
    private IPoliticsStatusService politicsStatusService;

    @ApiOperation(value = "获取所有员工(分页)")
    @GetMapping("/")
    public RespPageBean getEmployee(@RequestParam(defaultValue = "1") Integer currentPage,
                                    @RequestParam(defaultValue = "10") Integer size,
                                    Employee employee, LocalDate[] beginDateScope) {
        return employeeService.getEmployeeByPage(currentPage, size, employee, beginDateScope);
    }

    @ApiOperation(value = "获取所有职位")
    @GetMapping("/positions")
    public List<Position> getAllPositions() {
        return positionService.list();
    }

    @ApiOperation(value = "获取所有职称")
    @GetMapping("/joblevels")
    public List<Joblevel> getAllJobLevels() {
        return joblevelService.list();
    }

    @ApiOperation(value = "获取所有民族")
    @GetMapping("/nations")
    public List<Nation> getAllNations() {
        return nationService.list();
    }

    @ApiOperation(value = "获取所有政治面貌")
    @GetMapping("/politicsStatus")
    public List<PoliticsStatus> getAllPoliticsStatus() {
        return politicsStatusService.list();
    }

    @ApiOperation(value = "获取所有部门")
    @GetMapping("/deps")
    public List<Department> getAllDepartments() {
        return departmentService.getAllDepartments();
    }

    @ApiOperation(value = "获取工号")
    @GetMapping("/maxWorkID")
    public RespBean maxWorkID() {
        return employeeService.maxWorkID();
    }

    @ApiOperation(value = "添加员工")
    @PostMapping("/")
    public RespBean addEmp(@RequestBody Employee employee) {
        return employeeService.addEmp(employee);
    }

    @ApiOperation(value = "更新员工")
    @PutMapping("/")
    public RespBean updateEmp(@RequestBody Employee employee) {
        if (employeeService.updateById(employee)) {
            return RespBean.success("更新成功!");
        }
        return RespBean.error("更新失败!");
    }

    @ApiOperation(value = "删除员工")
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public RespBean deleteEmp(@PathVariable Integer id) {
        if (employeeService.removeById(id)) {
            return RespBean.success("删除成功!");
        }
        return RespBean.error("删除失败!");
    }
}

1.3.测试功能

获取所有员工(分页):

Mybatis-Plus实现分页展示数据_第1张图片

获取所有部门:

Mybatis-Plus实现分页展示数据_第2张图片

获取所有职称:

Mybatis-Plus实现分页展示数据_第3张图片

添加员工:

参数

{
      "name": "测试",
      "gender": "女",
      "birthday": "1993-03-13",
      "idCard": "451200193609248217",
      "wedlock": "已婚",
      "nationId": 1,
      "nativePlace": "丽丽市",
      "politicId": 13,
      "email": "[email protected]",
      "phone": "13091676162",
      "address": "澳门特别行政区东莞市高港关岭街Z座 113957",
      "departmentId": 9,
      "jobLevelId": 3,
      "posId": 1,
      "engageForm": "劳务合同",
      "tiptopDegree": "博士",
      "specialty": "护理学",
      "school": "清华大学",
      "beginDate": "2015-08-09",
      "workState": "在职",
      "workID": "00000107",
      "conversionTime": "2016-08-08",
      "beginContract": "2017-09-04",
      "endContract": "2019-06-23",
      "workAge": null,
      "salaryId": 4
    }

Mybatis-Plus实现分页展示数据_第4张图片

在这里插入图片描述

删除员工:

Mybatis-Plus实现分页展示数据_第5张图片

到这里员工管理模块就完成了,下一篇博客实现数据的导入和导出:


Easy POI实现数据导入导出

你可能感兴趣的:(项目练习,Java,java,mybatis,spring,boot)