1、應用場景:在我們的數據庫表中經常會有status這個字段,這個字段經常表示此類商品的狀態,例如:0->刪除,1->上架,0->下架,等等。

?2、我們返回給前端數據時,如果在頁面顯示0、1、2,顯然是不合適的。 這時就需要我們定義一個枚舉類來解決這個問題。
????????2.1 寫一個枚舉,用于描述狀態的意思
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@Getterprivate Integer code; //狀態@Setter@Getterprivate 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
/** 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即可
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