枚舉保存到數(shù)據(jù)庫(kù)中為序號(hào)解決方案

普通枚舉轉(zhuǎn)換配置

枚舉類

package com.gecko.charging.partner.enums;

import com.alibaba.fastjson.annotation.JSONType;
import com.gecko.charging.common.BaseEnum;
import com.gecko.charging.util.json.EnumDeserializer;
import com.gecko.charging.util.json.EnumSerializer;

/**
 * 合作商類型
 */
//@JSONType(serializer = EnumSerializer.class, deserializer = EnumDeserializer.class, serializeEnumAsJavaBean = true)
public enum PartnerType implements BaseEnum {
    agent(1),//代理商
    purchaser(2),//采購(gòu)商
    operators(3),//運(yùn)營(yíng)商
    ;

    private Integer code;

    PartnerType(Integer code) {
        this.code = code;
    }

    @Override
    public Integer getCode() {
        return this.code;
    }
}

枚舉轉(zhuǎn)換類 @Converter(autoApply = true)自動(dòng)適應(yīng)

package com.gecko.charging.partner.enums.converter;

import com.gecko.charging.device.enums.DeviceExceptionStatus;
import com.gecko.charging.partner.enums.PartnerType;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.util.Objects;

/**
* @description: 合作商Converter
* @author: Wzq
* @create: 2020-03-02 14:33
*/
@Converter(autoApply = true)
public class PartnerTypeConverter implements AttributeConverter<PartnerType, Integer> {

   @Override
   public Integer convertToDatabaseColumn(PartnerType attribute) {
       return attribute.getCode();
   }

   @Override
   public PartnerType convertToEntityAttribute(Integer dbData) {
       for (PartnerType e : PartnerType.values()) {
           if (Objects.equals(e.getCode(), dbData)) return e;
       }
       return null;
   }

}

在實(shí)體類中使用

package com.gecko.charging.partner.entity;

import com.gecko.charging.partner.enums.PartnerType;
import com.gecko.charging.partner.enums.PartnerSettlementMethod;
import com.meenoframework.common.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Table;
import java.util.Date;

/**
 * @description: 合作商
 * @author: Wzq
 * @create: 2020-03-02 14:25
 */
@Entity
@Table(name = "partner")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class Partner extends BaseEntity {

    // 用戶id
    private Long userId;

    // 郵箱
    private String email;

    // 公司名稱
    private String companyName;

    // 組織機(jī)構(gòu)代碼
    private String orgCode;

    //區(qū)域id
    private String areaId;

    //詳細(xì)地址
    @Column(columnDefinition = "TEXT")
    private String address;

    //合作商類型
    @Column(name = "type")
    private PartnerType partnerType;

    //結(jié)算方式
    private PartnerSettlementMethod settlementMethod;

    // 營(yíng)業(yè)執(zhí)照
    private String businessLicense;

    // 小區(qū)名稱
    private String areaName;

    // 創(chuàng)建時(shí)間
    @CreatedDate
    private Date createTime;

    // 創(chuàng)建id
    @CreatedBy
    private Long creatorId;

    // 修改人
    @LastModifiedBy
    private Long updateId;

    // 修改時(shí)間
    @LastModifiedDate
    private Date updateTime;

    // 是否刪除
    private Integer isDeleted;

}

高級(jí)適配玩法攒巍,上面那種方法需要一個(gè)枚舉對(duì)應(yīng)一個(gè)轉(zhuǎn)換類很麻煩

基礎(chǔ)枚舉轉(zhuǎn)換類

package com.gecko.charging.common.jpaenum.converter;

import com.gecko.charging.common.BaseEnum;

import javax.persistence.AttributeConverter;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;

public class BaseEnumConverter <X extends BaseEnum<Y>, Y> implements AttributeConverter<BaseEnum<Y>, Y> {

    private Class<X> xclazz;
    private Method valuesMethod;

    @SuppressWarnings("unchecked")
    public BaseEnumConverter() {
        this.xclazz = (Class<X>) (((ParameterizedType) this.getClass().getGenericSuperclass())
                .getActualTypeArguments())[0];
        try {
            valuesMethod = xclazz.getMethod("values");
        } catch (Exception e) {
            throw new RuntimeException("can't get values method from " + xclazz);
        }
    }

    @Override
    public Y convertToDatabaseColumn(BaseEnum attribute) {
        return attribute == null ? null : (Y) attribute.getCode();
    }

    @SuppressWarnings("unchecked")
    @Override
    public X convertToEntityAttribute(Y dbData) {
        try {
            X[] values = (X[]) valuesMethod.invoke(null);
            for (X x : values) {
                if (x.getCode().equals(dbData)) {
                    return x;
                }
            }
        } catch (Exception e) {
            throw new RuntimeException("can't convertToEntityAttribute" + e.getMessage());
        }
        throw new RuntimeException("unknown dbData " + dbData);
    }
}


枚舉基礎(chǔ)類

package com.gecko.charging.common;

public interface BaseEnum<Y> {
    Y getCode();

    static BaseEnum[] getValues() {
        return new BaseEnum[0];
    }
}

枚舉

package com.gecko.charging.device.enums;


import com.alibaba.fastjson.annotation.JSONType;
import com.gecko.charging.common.BaseEnum;
import com.gecko.charging.util.json.EnumDeserializer;
import com.gecko.charging.util.json.EnumSerializer;

/**
 * 設(shè)備歸屬枚舉
 */
@JSONType(serializer = EnumSerializer.class, deserializer = EnumDeserializer.class, serializeEnumAsJavaBean = true)
public enum DeviceOwnerType implements BaseEnum<Integer> {
    PLATFORM(1),// 平臺(tái)
    PROPERTY(2),// 物業(yè)商
    FRANCHISEE(3),// 加盟商
    ;

    private Integer code;

    DeviceOwnerType(Integer code) {
        this.code = code;
    }

    @Override
    public Integer getCode() {
        return code;
    }

        public static class Convert extends BaseEnumConverter<DeviceOwnerType, Integer> {

      }
}

實(shí)體類 需要加注解 @Convert(converter = DeviceOwnerType.Convert.class)

package com.gecko.charging.device.entity;


import com.gecko.charging.device.enums.*;
import com.meenoframework.common.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;

/**
 * 充電設(shè)備
 * @Author: JeffGao
 * @Date: Created in 2020/2/24
 * @Description:
 */
@Entity
@Table(name = "charging_device")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class ChargingDevice extends BaseEntity {

  // 歸屬類型
  @Column(columnDefinition = "TINYINT")
  @Convert(converter = DeviceOwnerType.Convert.class)
  private DeviceOwnerType ownerType;
  // 歸屬者ID
  private Long ownerId;
  // 分潤(rùn)類型
  @Column(columnDefinition = "TINYINT")
  private ProfitShareType profitShareType;
  // 場(chǎng)景類型
  @Column(columnDefinition = "TINYINT")
  private SceneType sceneType;
  // 設(shè)備類型
  @Column(columnDefinition = "TINYINT")
  private DeviceType type;
  // 省市區(qū)編號(hào)
  private String areaId;
  // 緯度
  private String lat;
  // 經(jīng)度
  private String lon;
  // sn號(hào)
  private String sn;
  // sn名稱
  private String snName;
  // 插座數(shù)
  private Integer plugBaseCount;
  // 設(shè)備狀態(tài)
  @Column(columnDefinition = "TINYINT")
  private DeviceStatus status;
  // 斷電功率
  private Integer cutPower;
  // 收費(fèi)套餐
  private Long feePackId;
  // 詳細(xì)地址
  private String address;
  // 創(chuàng)建人
  private Long creatorId;
  @CreatedDate
  private Date createTime;
  @LastModifiedDate
  private Date updateTime;
  // 上線時(shí)間
  private Date onlineTime;

}

@Convert(converter = DeviceOwnerType.Convert.class)
使用這個(gè)注解配置生效!

個(gè)人微信公眾橡淑,經(jīng)常更新一些實(shí)用的干貨:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茎用,一起剝皮案震驚了整個(gè)濱河市权她,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旗芬,老刑警劉巖瘤睹,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件升敲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡轰传,警方通過(guò)查閱死者的電腦和手機(jī)驴党,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)获茬,“玉大人港庄,你說(shuō)我怎么就攤上這事∷∏” “怎么了攘轩?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)码俩。 經(jīng)常有香客問(wèn)我度帮,道長(zhǎng),這世上最難降的妖魔是什么稿存? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任笨篷,我火速辦了婚禮,結(jié)果婚禮上瓣履,老公的妹妹穿的比我還像新娘率翅。我一直安慰自己,他們只是感情好袖迎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布冕臭。 她就那樣靜靜地躺著,像睡著了一般燕锥。 火紅的嫁衣襯著肌膚如雪辜贵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天归形,我揣著相機(jī)與錄音托慨,去河邊找鬼。 笑死暇榴,一個(gè)胖子當(dāng)著我的面吹牛厚棵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔼紧,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婆硬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奸例?” 一聲冷哼從身側(cè)響起彬犯,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后躏嚎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菩貌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年卢佣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箭阶。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虚茶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仇参,到底是詐尸還是另有隱情嘹叫,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布诈乒,位于F島的核電站罩扇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏怕磨。R本人自食惡果不足惜喂饥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肠鲫。 院中可真熱鬧员帮,春花似錦、人聲如沸导饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渣锦。三九已至硝岗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袋毙,已是汗流浹背辈讶。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娄猫,地道東北人贱除。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像媳溺,于是被迫代替她去往敵國(guó)和親月幌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容