状态码转文字!!!(表格数字转文字)

1、应用场景:在我们的数据库表中经常会有status这个字段,这个字段经常表示此类商品的状态,例如:0->删除,1->上架,0->下架,等等。

2、我们返回给前端数据时,如果在页面显示0、1、2,显然是不合适的。 这时就需要我们定义一个枚举类来解决这个问题。

2.1 写一个枚举,用于描述状态的意思
java 复制代码
package com.by.enmus;

import lombok.Getter;
import lombok.Setter;

import java.util.Arrays;
import java.util.Optional;

/**
 * <p>Project: wms-root - ProduceStatus</p>
 * <p>Powered by scl On 2024-02-27 14:54:47</p>
 * <p>描述:<p>
 *
 * @author 孙臣龙 [[email protected]]
 * @version 1.0
 * @since 17
 */
public enum ProductStatus {
    SALE(1, "上架"),
    OFF_SALE(2, "下架"),
    DELETE(0, "删除");

    @Setter
    @Getter
    private Integer code; //状态
    @Setter
    @Getter
    private String desc; //状态描述

    ProductStatus(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static ProductStatus findByCode(Integer code) {
        //jdk1.8提供了哪些新特性
        Optional<ProductStatus> optional = Arrays.stream(ProductStatus.values()).filter(item -> item.getCode().equals(code)).findFirst();
        /*
        if (optional.isPresent()){
            return optional.get();
        }
        return null;
        */
        return optional.orElse(null);
    }
}
2.2 在商品的pojo 里对状态码(status)做个增强 statusx
java 复制代码
/*
 * Copyright (c) 2020, 2024,  All rights reserved.
 *
 */
package com.by.model;

import com.by.enmus.ProductStatus;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>Project: pages - Product</p>
 * <p>Powered by scl On 2024-02-18 15:56:32</p>
 * <p>描述:<p>
 *
 * @author 孙臣龙 [[email protected]]
 * @version 1.0
 * @since 17
 */
@Data
public class Product extends BaseModel {
    private Integer id;
    private String name;
    private String subName;
    private Integer categoryId;
    private String img;
    //status默认0为删除
    private Integer status = 1;
    private String statusX;

    // 根据状态码获取状态值返回给前端,前端直接使用statusX来显示状态值
    public String getStatusX() {
        ProductStatus productStatus = ProductStatus.findByCode(this.status);
        if (productStatus != null) {
            return productStatus.getDesc();
        }
        return "未定义";
    }
    private BigDecimal price;
    private String brief;
    private Integer seq;
    private String tags;
    private String lastUpdateBy;

}

3、前端只需要渲染statusX这个属性值就可以了

4、附加:这时也许你在查询时会出现一个bug,状态为0 的也能显示出来,这就需要修改我们的sql语句了。只需将状态status值大于或不等于0即可

sql 复制代码
 select * from 205_product
        <where>
            <if test="id != null">
                and id = #{id}
            </if>
            <if test="categoryId != null">
                and categoryId = #{categoryId}
            </if>
            <if test="ids != null">
                and id in
                <foreach collection="ids" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="name != null">
                and name like CONCAT('%',#{name}, '%')
            </if>
                 and status>0
        </where>
        order by seq desc
相关推荐
lyh13442 天前
【Fiddler工具判断前后端Bug】
状态模式
季鸢2 天前
Java设计模式之状态模式详解
java·设计模式·状态模式
萌新小码农‍3 天前
Spring框架学习day7--SpringWeb学习(概念与搭建配置)
学习·spring·状态模式
EndingCoder4 天前
React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用
前端·javascript·react.js·前端框架·状态模式
何双新7 天前
第14讲、Odoo 18 实现一个Markdown Widget模块
python·状态模式
zwjapple8 天前
react-native的token认证流程
react native·状态模式·token
何中应8 天前
【设计模式-4.6】行为型——状态模式
java·设计模式·状态模式
失败尽是常态Z9 天前
基于JWT+Redis的登录流程实现
java·数据库·redis·状态模式·jwt·用户登录
暴躁哥12 天前
深入理解设计模式之状态模式
设计模式·状态模式
熙客13 天前
行为型:状态模式
状态模式