Spring Boot 处理魔法数字
·
魔法数字应用示例
src/main/java/com/weiyu/service/CapitalInfoService.java
package com.weiyu.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 刷新资金信息列表
*/
public List<CapitalInfoVO> refreshList() {
LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();
// 构造查询条件
queryWrapper
// 精确查询 - 资金状态为使用中
.eq(CapitalInfo::getCapitalState, 0)
// 或者
.or()
// 精确查询 - 资金状态为已回笼
.eq(CapitalInfo::getCapitalState, 1)
// 倒序排序 - 资金年份
.orderByDesc(CapitalInfo::getCapitalYear)
// 倒序排序 - 主键id
.orderByDesc(CapitalInfo::getId);
List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);
// List<CapitalInfo> -> List<CapitalInfoVO>
return capitalInfos.stream()
.map(capitalInfo -> {
CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
return capitalInfoVO;
})
.collect(Collectors.toList());
}
}
src/main/java/com/weiyu/model/CapitalInfo.java
package com.weiyu.model;
import com.baomidou.mybatisplus.annotation.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 资金信息实体类
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("CapitalInfoManage")
public class CapitalInfo {
/**
* 主键id
*/
@TableId(value = "cim_ID", type = IdType.AUTO)
private Integer id;
/**
* 资金序号
*/
@TableField("cim_CapitalNo")
private String capitalNo;
/**
* 资金名称
*/
@TableField("cim_CapitalName")
@NotBlank(message = "资金名称不能为空")
private String capitalName;
/**
* 资金类别
*/
@TableField("cim_CapitalType")
@NotBlank(message = "资金类别不能为空")
private String capitalType;
/**
* 指标预算总额
*/
@TableField("cim_CapitalTotal")
@NotNull(message = "指标预算总额不能为空")
private BigDecimal capitalTotal;
/**
* 指标剩余额
*/
@TableField("cim_CapitalLeaveTotal")
@NotNull(message = "指标剩余额不能为空")
private BigDecimal capitalLeaveTotal;
/**
* 指标可用总额
*/
@TableField("cim_CapitalValidTotal")
@NotNull(message = "指标可用总额不能为空")
private BigDecimal capitalValidTotal;
/**
* 指标类别
*/
@TableField("cim_CapitalIndexType")
@NotBlank(message = "指标类别不能为空")
private String capitalIndexType;
/**
* 资金账户
*/
@TableField("cim_CapitalAccount")
@NotBlank(message = "资金账户不能为空")
private String capitalAccount;
/**
* 资金来源
*/
@TableField("cim_CapitalSource")
@NotBlank(message = "资金来源不能为空")
private String capitalSource;
/**
* 指标来源
*/
@TableField("cim_CapitalIndexSource")
@NotBlank(message = "指标来源不能为空")
private String capitalIndexSource;
/**
* 资金年份
*/
@TableField("cim_CapitalYear")
@NotNull(message = "资金年份不能为空")
@Min(value = 2000, message = "资金年份不能早于2000年")
@Max(value = 2100, message = "资金年份不能晚于2100年")
private Integer capitalYear;
/**
* 资金状态
*/
@TableField("cim_State")
@NotNull(message = "状态不能为空")
private Integer capitalState;
/**
* 备注信息
*/
@TableField("cim_Remark")
private String remark;
/**
* 创建时间
*/
@TableField(value = "cim_CreateDate", fill = FieldFill.INSERT)
private LocalDateTime createTime;
}
src/main/java/com/weiyu/model/CapitalInfoVO.java
package com.weiyu.model;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 资金信息 VO
*/
@Data
public class CapitalInfoVO {
/**
* 主键id
*/
private Integer id;
/**
* 资金序号
*/
private String capitalNo;
/**
* 资金名称
*/
private String capitalName;
/**
* 资金类别
*/
private String capitalType;
/**
* 指标预算总额
*/
private BigDecimal capitalTotal;
/**
* 指标剩余额
*/
private BigDecimal capitalLeaveTotal;
/**
* 指标可用总额
*/
private BigDecimal capitalValidTotal;
/**
* 指标类别
*/
private String capitalIndexType;
/**
* 资金账户
*/
private String capitalAccount;
/**
* 资金来源
*/
private String capitalSource;
/**
* 指标来源
*/
private String capitalIndexSource;
/**
* 资金年份
*/
private Integer capitalYear;
/**
* 资金状态
*/
private Integer capitalState;
/**
* 备注信息
*/
private String remark;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
使用常量类替换魔法数字
常量类
src/main/java/com/weiyu/constant/CapitalInfoStateConstants.java
package com.weiyu.constant;
/**
* 资金信息状态常量类
*/
@SuppressWarnings("all")
public final class CapitalInfoStateConstants {
private CapitalInfoStateConstants() {
// 工具类,防止实例化
}
/**
* 使用中
*/
public static final int IN_USE = 0;
/**
* 已回笼
*/
public static final int RETURNED = 1;
/**
* 已结案
*/
public static final int CLOSED = 2;
}
src/main/java/com/weiyu/service/CapitalInfoService.java
package com.weiyu.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.constant.CapitalInfoStateConstants;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 刷新资金信息列表
*/
public List<CapitalInfoVO> refreshList() {
LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();
// 构造查询条件
queryWrapper
// 精确查询 - 资金状态为使用中
.eq(CapitalInfo::getCapitalState, CapitalInfoStateConstants.IN_USE)
// 或者
.or()
// 精确查询 - 资金状态为已回笼
.eq(CapitalInfo::getCapitalState, CapitalInfoStateConstants.RETURNED)
// 倒序排序 - 资金年份
.orderByDesc(CapitalInfo::getCapitalYear)
// 倒序排序 - 主键id
.orderByDesc(CapitalInfo::getId);
List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);
// List<CapitalInfo> -> List<CapitalInfoVO>
return capitalInfos.stream()
.map(capitalInfo -> {
CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
return capitalInfoVO;
})
.collect(Collectors.toList());
}
}
使用枚举替换魔法数字(简单应用:不改变实体类和VO)
枚举
src/main/java/com/weiyu/enumeration/CapitalInfoStateEnum.java
package com.weiyu.enumeration;
import lombok.Getter;
/**
* 资金信息状态枚举
*/
@Getter
public enum CapitalInfoStateEnum {
/**
* 使用中
*/
IN_USE(0, "使用中"),
/**
* 已回笼
*/
RETURNED(1, "已回笼"),
/**
* 已结案
*/
CLOSED(2, "已结案");
private final Integer value;
private final String description;
CapitalInfoStateEnum(Integer value, String description) {
this.value = value;
this.description = description;
}
}
src/main/java/com/weiyu/service/CapitalInfoService.java
package com.weiyu.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.enumeration.CapitalInfoStateEnum;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 刷新资金信息列表
*/
public List<CapitalInfoVO> refreshList() {
LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();
// 构造查询条件,WHERE (cim_State = ? OR cim_State = ?) ORDER BY cim_CapitalYear DESC,cim_ID
queryWrapper
// 精确查询 - 资金状态为使用中
.eq(CapitalInfo::getCapitalState, CapitalInfoStateEnum.IN_USE.getValue())
// 或者
.or()
// 精确查询 - 资金状态为已回笼
.eq(CapitalInfo::getCapitalState, CapitalInfoStateEnum.RETURNED.getValue())
// 倒序排序 - 资金年份
.orderByDesc(CapitalInfo::getCapitalYear)
// 倒序排序 - 主键id
.orderByDesc(CapitalInfo::getId);
List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);
// List<CapitalInfo> -> List<CapitalInfoVO>
return capitalInfos.stream()
.map(capitalInfo -> {
CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
return capitalInfoVO;
})
.collect(Collectors.toList());
}
}
使用 in
package com.weiyu.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.enumeration.CapitalInfoStateEnum;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 刷新资金信息列表
*/
public List<CapitalInfoVO> refreshList() {
LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();
// 构造查询条件,WHERE (cim_State IN (?,?)) ORDER BY cim_CapitalYear DESC,cim_ID DESC
queryWrapper
// in - 资金状态为使用中或已回笼,使用常量替换魔法数字0,使用枚举替换魔法数字1
.in(CapitalInfo::getCapitalState, Arrays.asList(
CapitalInfoStateConstants.IN_USE,
CapitalInfoStateEnum.RETURNED.getValue())
)
// 倒序排序 - 资金年份
.orderByDesc(CapitalInfo::getCapitalYear)
// 倒序排序 - 主键id
.orderByDesc(CapitalInfo::getId);
List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);
// List<CapitalInfo> -> List<CapitalInfoVO>
return capitalInfos.stream()
.map(capitalInfo -> {
CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
return capitalInfoVO;
})
.collect(Collectors.toList());
}
}
更多推荐



所有评论(0)