Mybatis-Plus分页及接口API

1.实现逻辑分页

Controller层

@GetMapping("/query")
public IPage<MonitorRo> queryList(
		@Min(1) @RequestParam (required = false, defaultValue = "10") Integer size,
        @Min(1) @RequestParam (required = false, defaultValue = "1") Integer current,
                @RequestParam (required = false) String name,
                @RequestParam (required = false) String uid,
                @RequestParam (required = false) String status)

        {
            MonitorVo monitorVo = new MonitorVo();
            monitorVo.setName(name);
            monitorVo.setUid(uid);
            monitorVo.setStatus(status);
                封装入参为对象
                
            IPage<MonitorRo> result = monitorService.listDTO(size, current, monitorVo);
            return result;
        }


采用  ?关键字=传入数值&&关键字=传入数值方式

抽象接口

 IPage<MonitorRo> listDTO(Integer size, Integer current, MonitorVo monitorVo);

业务实现

public IPage<MonitorRo> listDTO(Integer size, Integer current, MonitorVo monitorVo) {
        QueryWrapper<Monitor> queryWrapper = new QueryWrapper<>();
        if (monitorVo != null) {
            queryWrapper.lambda().
                    eq(monitorVo.getName() != null, Monitor::getName, monitorVo.getName()).
                    eq(monitorVo.getStatus() != null, Monitor::getStatus, monitorVo.getStatus()).
                    eq(monitorVo.getUid() != null, Monitor::getUid, monitorVo.getUid());
        }      
              获取合适的过滤对象
              若三个入参都不为空,则过滤条件需都满足
              若有参数为空,后跟过滤条件作废
        
        Page<Monitor> page = new Page(current, size);
        IPage<Monitor> entityPage = iMonitorService.page(page, queryWrapper);
        List<Monitor> DTO = entityPage.getRecords();     获得全部记录
        List<MonitorRo> new_list = new ArrayList<>();
        for (Monitor monitor : DTO) {
            MonitorRo monitorRo = new MonitorRo();
            BeanUtils.copyProperties(monitor, monitorRo);
            new_list.add(monitorRo);
        }
              封装内层出参

        IPage<MonitorRo> result = new Page();
        result.setCurrent(entityPage.getCurrent());   当前页数
        result.setPages(entityPage.getPages());       总页数
        result.setTotal(entityPage.getTotal());       总对象数
        result.setSize(entityPage.getSize());         一页的数据条数
        result.setRecords(new_list);                  展示全部记录
              封装外层出参
        return result;
    }

2.项目整体代码实现

Controller层
这里仅展示AlarmController代码

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fitmgr.ces.api.v1.request.AlarmEo;
import com.fitmgr.ces.api.v1.request.AlarmVo;
import com.fitmgr.ces.api.v1.response.AlarmRo;
import com.fitmgr.ces.db.entity.Alarm;
import com.fitmgr.ces.service.alarm.AlarmManager;
import com.fitmgr.common.core.constant.enums.BusinessEnum;
import com.fitmgr.common.core.exception.BusinessException;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.Min;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author lifc
 * @since 2020-10-20
 */
@Data
@RestController
@RequestMapping("/v1/alarm")
public class AlarmController {

    @Autowired
    private AlarmManager alarmManager;

    @GetMapping("/{id}")
    public AlarmRo getOneDetail(@PathVariable Integer id) {

        return alarmManager.getOneById(id);
    }

    @GetMapping("/getall")
    public List<Alarm> getAll(@RequestParam(required = false) String name,
                              @RequestParam(required = false) String source,
                              @RequestParam(required = false) String alarm_level) {
        AlarmVo alarmVo = new AlarmVo();
        alarmVo.setName(name);
        alarmVo.setAlarmLevel(alarm_level);
        alarmVo.setSource(source);
        List<Alarm> result = alarmManager.getAll(alarmVo);
        return result;
    }

    @GetMapping("")
    public IPage<AlarmRo> getList(
            @Min(1) @RequestParam(required = false, defaultValue = "10") Integer size,
            @Min(1) @RequestParam(required = false, defaultValue = "1") Integer current,
            @RequestParam(required = false) String name,
            @RequestParam(required = false) String source,
            @RequestParam(required = false) String alarm_level

    ) {
        AlarmVo alarmVo = new AlarmVo();
        alarmVo.setName(name);
        alarmVo.setAlarmLevel(alarm_level);
        alarmVo.setSource(source);
        IPage<AlarmRo> result = alarmManager.getList(size, current, alarmVo);
        return result;
    }

    @PostMapping("")
    public Alarm createOne(@Valid @RequestBody AlarmEo alarmEo) {
        return alarmManager.createOne(alarmEo);
    }

    @PutMapping("")
    public Alarm updateOne(@Valid @RequestBody AlarmEo alarmEo) {
        return alarmManager.updateOne(alarmEo);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Integer id) {
        alarmManager.deleteOne(id);
    }
}

其中 AlarmVo 为查询接口封装入参
     AlarmEo 为增加、修改封装入参
     AlarmRo 为封装出参
     Alarm   为数据库表
     
这里展示了三种传参方式,   params ?xx=xx   body体     路径入参

数据库表结构

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 
 * </p>
 *
 * @author lifc
 * @since 2020-10-20
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Alarm implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Integer id;

    private String name;

    private String source;

    private String alarmLevel;

    private String uniqueId;

    private LocalDateTime timeStamp;

    private String project;

    private String resource;

    private String description;

    private String metedata;

    private String reason;

    private String alarmType;

}

封装入参体参数校验及属性名同步

import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;

@Data
public class AlarmEo implements Serializable {

    @NotNull
    @Max(255)
    private Integer id;
//  唯一标识

    @NotBlank
    @Size(max = 255)
    private String name;

    @NotBlank
    @Size(max = 255)
    private String source;


    @NotBlank
    @Size(max = 255)
    @JsonProperty("alarm_level")
    private String alarmLevel;

    @JsonProperty("unique_id")
    private String uniqueId;

    @NotBlank
    @JsonProperty("time_stamp")
    private String timeStamp;

    @Size(max = 255)
    private String project;

    @Size(max = 255)
    private String resource;

    private String description;

    @Size(max = 255)
    private String metedata;

    @Size(max = 255)
    private String reason;

    @Size(max = 255)
    @JsonProperty("alarm_type")
    private String alarmType;
}

出参体

import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;


@Data
public class AlarmRo implements Serializable {

    private Integer id;

    private String name;

    private String source;

    private String alarmLevel;

    private String uniqueId;

    private LocalDateTime timeStamp;

    private String project;

    private String resource;

    private String description;

    private String metedata;

    private String reason;

    private String alarmType;
}

AlarmManager 业务实现

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fitmgr.ces.api.v1.request.AlarmEo;
import com.fitmgr.ces.api.v1.request.AlarmVo;
import com.fitmgr.ces.api.v1.response.AlarmRo;
import com.fitmgr.ces.common.constant.MessageConstant;
import com.fitmgr.ces.common.enums.ReturnCodes;
import com.fitmgr.ces.db.entity.Alarm;
import com.fitmgr.ces.db.service.IAlarmService;
import com.fitmgr.ces.exceptions.NotFoundException;
import com.fitmgr.common.core.constant.enums.BusinessEnum;
import com.fitmgr.common.core.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.fitmgr.ces.exceptions.*;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@Component
public class AlarmManager {

    @Autowired
    IAlarmService iAlarmService;

    /**
     * 根据ID查询告警
     *
     * @param id
     * @return alarmRo
     * @throw BaseException
     */
    public AlarmRo getOneById(Integer id) {
        Alarm alarm = iAlarmService.getById(id);
        if (alarm == null) {
            log.error("告警查找失败,未找到该告警" + "{id=" + id + " }");
            throw new NotFoundException(ReturnCodes.ALARM_QUERY);
        }
        AlarmRo alarmRo = new AlarmRo();
        BeanUtils.copyProperties(alarm, alarmRo);
        return alarmRo;
    }

    /**
     * 根据unique_id查询告警,内部调用
     *
     * @param unique_id
     * @return alarm
     */
    public Alarm getOneByUnique_id(String unique_id) {
        QueryWrapper<Alarm> queryWrapper = new QueryWrapper<>();
        Alarm alarm = iAlarmService.getOne(queryWrapper.lambda().
                eq(Alarm::getUniqueId, unique_id));
        if (alarm == null) {
            log.error("告警查找失败,未找到该告警" + "{unique_id=" + unique_id + " }");
            throw new NotFoundException(ReturnCodes.ALARM_QUERY);
        }
        return alarm;
    }

    /**
     * 查询所有告警,内部调用
     *
     * @param alarmVo
     * @return List<Alarm>
     */
    public List<Alarm> getAll(AlarmVo alarmVo) {
        QueryWrapper<Alarm> queryWrapper = new QueryWrapper<>();
        List<Alarm> alarms = iAlarmService.list(queryWrapper.lambda().
                eq(alarmVo.getAlarmLevel() != null, Alarm::getAlarmLevel, alarmVo.getAlarmLevel()).
                eq(alarmVo.getName() != null, Alarm::getName, alarmVo.getName()).
                eq(alarmVo.getSource() != null, Alarm::getSource, alarmVo.getSource()));

        return alarms;
    }

    /**
     * 根据平台、名称、等级过滤查询告警,分页显示,默认显示第一页十条信息
     *
     * @param size
     * @param current
     * @param alarmVo
     * @return IPage<AlarmRo>
     */
    public IPage<AlarmRo> getList(Integer size, Integer current, AlarmVo alarmVo) {
        QueryWrapper<Alarm> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().
                eq(alarmVo.getAlarmLevel() != null, Alarm::getAlarmLevel, alarmVo.getAlarmLevel()).
                eq(alarmVo.getName() != null, Alarm::getName, alarmVo.getName()).
                eq(alarmVo.getSource() != null, Alarm::getSource, alarmVo.getSource());

        Page<Alarm> page = new Page(current, size);
        IPage<Alarm> entityPage = iAlarmService.page(page, queryWrapper);
        List<Alarm> alarmList = entityPage.getRecords();
        List<AlarmRo> alarmRoList = new ArrayList<>();
        for (Alarm alarm : alarmList) {
            AlarmRo alarmRo = new AlarmRo();
            BeanUtils.copyProperties(alarm, alarmRo);
            alarmRoList.add(alarmRo);
        }

        IPage<AlarmRo> result = new Page();
        result.setCurrent(entityPage.getCurrent());
        result.setPages(entityPage.getPages());
        result.setTotal(entityPage.getTotal());
        result.setSize(entityPage.getSize());
        result.setRecords(alarmRoList);
        return result;
    }

    /**
     * 创建告警,内部调用
     *
     * @param alarmEo
     * @return alarmNew
     */
    public Alarm createOne(AlarmEo alarmEo) {
        Alarm alarmNew = new Alarm();
        BeanUtils.copyProperties(alarmEo, alarmNew);
        String uniqueId = alarmEo.getSource() + alarmEo.getId().toString();
        alarmNew.setUniqueId(uniqueId);
        alarmNew.setDescription(alarmEo.getTimeStamp());
        LocalDateTime nowTime = LocalDateTime.now();
        alarmNew.setTimeStamp(nowTime);
        iAlarmService.save(alarmNew);
        log.info("创建告警成功");
        return alarmNew;
    }

    /**
     * 更新告警,内部调用
     *
     * @param alarmE0
     * @return alarmOri
     */
    public Alarm updateOne(AlarmEo alarmE0) {
        Integer id = alarmE0.getId();
        QueryWrapper<Alarm> queryWrapper = new QueryWrapper<>();
        Alarm alarmOri = iAlarmService.getOne(queryWrapper.lambda().
                eq(Alarm::getId, id));
        if (alarmOri == null) {
            log.error("更新告警失败,未找到该告警" + "{id=" + id + " }");
            throw new NotFoundException(ReturnCodes.ALARM_UPDATE);
        }
        BeanUtils.copyProperties(alarmE0, alarmOri);
        LocalDateTime nowTime = LocalDateTime.now();
        alarmOri.setTimeStamp(nowTime);
        iAlarmService.saveOrUpdate(alarmOri);
        log.info("更新告警成功");
        return alarmOri;
    }

    /**
     * 删除告警,内部调用
     *
     * @param id
     * @return
     */
    public void deleteOne(Integer id) {
        Alarm alarm = iAlarmService.getById(id);
        if (alarm != null) {
            iAlarmService.removeById(id);
            log.info("删除告警成功");
        } else {
            log.error("删除告警失败,告警不存在" + "{id=" + id + " }");
            throw new NotFoundException(ReturnCodes.ALARM_DELETE);
        }
    }
}

异常定义在统一文件中,不再展示

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值