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

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 孙臣龙 [1846080280@qq.com]
 * @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 孙臣龙 [1846080280@qq.com]
 * @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
相关推荐
阿珊和她的猫4 天前
深入理解与使用 Cookie:Web 开发中的关键机制
前端·状态模式
阿珊和她的猫5 天前
实现网页锚点功能的技术指南
前端·javascript·vue.js·状态模式
驴儿响叮当20105 天前
设计模式之状态模式
设计模式·状态模式
小王不爱笑1326 天前
LangChain4j 项目实战--4:硅谷小智(实现流式输出)
状态模式
茶本无香6 天前
设计模式之十六:状态模式(State Pattern)详解 -优雅地管理对象状态,告别繁琐的条件判断
java·设计模式·状态模式
木斯佳7 天前
前端八股文面经大全:字节跳动前端一面(2025-10-09)·面经深度解析
前端·状态模式
山北雨夜漫步9 天前
点评Day06 剩下的卡拉米,我不都写,只写一些新奇的
状态模式
木斯佳10 天前
前端八股文面经大全:京东零售前端实习一面(2026-1-20)·面经深度解析
前端·状态模式·零售
木斯佳10 天前
前端八股文面经大全:字节前端一面(2026-2-1)·面经深度解析
前端·状态模式
前端不太难10 天前
Flutter 页面切换后为什么会“状态丢失”或“状态常驻”?
flutter·状态模式