springboot+vue之实现后端员工的分页查询

发布时间:2023年12月28日

一、实现逻辑

封装一个startPage()的方法,表示开启分页查询。Controller层通过接收前端的请求,将请求委托给Service,调用Service层的search()方法,Service层再调用相应的Mapper方法来操作数据库,实现数据的访问。

二、具体实现之基础准备

1、编写通用的分页查询请求 PageReq.java

@Getter
@Setter
@ApiModel(value = "分页模型")
public class PageReq {

    @ApiModelProperty(value = "当前第几页",required = true)
    @NotNull(message = "当前页码不能为空")
    private Integer page;

    @ApiModelProperty(value = "每页显示几笔",required = true)
    @NotNull(message = "每页笔数不能为空")
    private Integer size;
}

注:因当前未写前端页面,所以通过swagger来进行调试,ApiModel、ApiModelProperty表示Swagger的注解。

2、编写通用的分页查询响应 PageResp.java

@Getter
@Setter
@ApiModel(value = "分页响应模型")
public class PageResp<T> {
    @ApiModelProperty(value = "总共多少笔数据")
    private Long total;

    @ApiModelProperty(value = "当前页的数据")
    private List<T> rows;

}

3、编写员工的分页查询请求 EmployeeSearchReq.java

@Getter
@Setter
@ToString
@ApiModel(value = "员工查询模型")
public class EmployeeSearchReq extends PageReq {
    /**
     * 账户名
     */
    @ApiModelProperty(value = "账户名")
    private String loginName;

}

注:分页查询条件是通过账号进行查询

4、编写员工的分页查询响应 EmployeeResp.java

@Getter
@Setter
@ToString
@ApiModel(value = "员工查询响应模型")
public class EmployeeResp {
    /**
     * 主键
     */
    @ApiModelProperty(value = "编号")
    private Long id;

    /**
     * 登录账户
     */
    @ApiModelProperty(value = "登录账户")
    private String loginName;


    /**
     * 性别(0 女 1 男)
     */
    @ApiModelProperty(value = "性别(0 女 1 男)")
    private String gender;

    /**
     * 状态(1停用,0正常)
     */
    @ApiModelProperty(value = "状态(1停用,0正常)")
    private String status;

    /**
     * 头像
     */
    @ApiModelProperty(value = "头像")
    private String avatar;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;

    /**
     * 1超级管理员,0普能后台用户
     */
    private String root;

}

5、封装分页开启的方法

/**
     * 开启PageHelper分页拦截器
     */
    public void startPage(PageReq pageReq){
        PageHelper.startPage(pageReq.getPage(),pageReq.getSize());
    }

    /**
     * 泛型放在参数上,分页封装结果
     * @param list
     * @param <T>
     * @return
     */
    public  <T> R<PageResp<T>> getDataTable(List<T> list){
        PageResp<T> pageResp = new PageResp<>();
        //判断响应对象的类型,如果你是使用了分页组件以后
        if (list instanceof Page){
            Page page= (Page) list;
            pageResp.setTotal(page.getTotal());
            pageResp.setRows(page.getResult());
        }else {
            pageResp.setTotal((long) list.size());
            pageResp.setRows(list);
        }
        return R.okHasData(pageResp);
    }

三、逻辑实现

1、Controller层

@RestController
@RequestMapping(value = "/api/employee")
@Api(tags = "后台-员工Api")
public class EmployeeController {
    //注入EmployeeService层
    @Autowired
    private EmployeeService employeeService;

    @ApiOperation(value = "分页查询")
    @GetMapping
    public R<PageResp<EmployeeResp>> search(@Valid EmployeeSearchReq req){
        //开启分页
        super.startPage(req);
        //调用service层的search方法
        List<EmployeeResp> list=this.employeeService.search(req);
        return getDataTable(list);
    }
}

2、Service层 ---业务逻辑层

1)EmployeeService.java

    /**
     * 查询数据
     * @param req
     * @return
     */
    List<EmployeeResp> search(EmployeeSearchReq req);

2)EmployeeServiceImpl.java

     /**
     * 查询
     * @param req
     * @return
     */
    @Override
    public List<EmployeeResp> search(EmployeeSearchReq req) {
        return super.baseMapper.search(req);
    }

3、Mapper层 ---数据访问层

1)EmployeeMapper.java

    /**
     * 查询
     * @param req
     * @return
     */
    List<EmployeeResp> search(@Param(value = "req") EmployeeSearchReq req);

2)EmployeeMapper.xml? ---sql语句

    <select id="search" resultType="com.hxzy.controller.admin.employee.resp.EmployeeResp"
        parameterType="com.hxzy.controller.admin.employee.req.EmployeeSearchReq">
        select id,
               login_name as loginName,
               gender,status,avatar,
               create_time as createTime,
               root
         from employee
         <where>
             <if test="req.loginName!=null and req.loginName!=''">
                 and login_name like concat('%',#{req.loginName},'%')
             </if>
         </where>
    </select>

四、Swagger调试页面

文章来源:https://blog.csdn.net/m0_53773988/article/details/135249237
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。