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

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
相关推荐
努力也学不会java19 小时前
【设计模式】状态模式
java·设计模式·状态模式
闲人编程2 天前
前端形态与样式风格:从古典到现代的视觉语言演进
前端·css·状态模式·组件·js·风格·响应式
摸鱼仙人~5 天前
后端错误处理的艺术:BusinessException 与 ResultUtils 的完美分工
状态模式
上优5 天前
Vue3纯前端同源跨窗口通信移动AGV小车
前端·vue.js·状态模式
南山二毛6 天前
机器人控制器开发(部署——软件打包备份更新)
机器人·状态模式
阿里嘎多哈基米6 天前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
bikong77 天前
状态模式(State Pattern)——网络连接场景的 C++ 实战
状态模式
TechNomad7 天前
设计模式:状态模式(State Pattern)
设计模式·状态模式
mit6.8249 天前
[Upscayl图像增强] docs | 前端 | Electron工具(web->app)
前端·人工智能·electron·状态模式
卑微的小鬼9 天前
Go语言的编译和运行过程
开发语言·golang·状态模式