Java 枚举那点事
最近有需求,想存自定义的枚举值,比如
HOTLINE("Hotline")
我想存 Hotline
于是研究了一下Java的枚举问题
如下数据库的Entity (贫血模型哈)
@Entity
@Table(name = "complaint")
public class Complaint {
@Id
@GeneratedValue
private Long id;
private CaseOrigin origin;
}
枚举
public enum CaseOrigin {
HOTLINE("Hotline"),
EMAIL("mail/fax/email"),
WALK_IN("Walk-in"),
OTHER("Others");
public String value() {
return value;
}
private final String value;
private CaseOrigin(String value) {
this.value = value;
}
}
用的是Spring Boot 自带的 Hibernate
Hibernate 提供了两种方便的注解
- 1 也就是默认的注解 ,存是的 1,2,3,4,5 之类的数字
@Enumerated(EnumType.ORDINAL)
private CaseOrigin origin;
- 2 这是存枚举的name 如 :
OTHER("Others")
存的是OTHER
@Enumerated(EnumType.STRING)
private CaseOrigin origin;
但是这两种方式,都不符合我的需求,我想存的是 Others
于是,找到了目前为止最优雅的方式
实现接口 AttributeConverter
重写接口的方法,很表意,就不解释了。
public class CaseOriginConverter implements AttributeConverter<CaseOrigin, String> {
@Override
public String convertToDatabaseColumn(CaseOrigin attribute) {
return attribute.value();
}
@Override
public CaseOrigin convertToEntityAttribute(String dbData) {
return CaseOrigin.formDbValue(dbData);
}
}
枚举我们也要改造一下,当然,如果不想改造枚举类。在类CaseOriginConverter
重写convertToEntityAttribute(String dbData)
就要费点事了,比如switch
,反射
(最优雅的方式 )
public enum CaseOrigin {
HOTLINE("Hotline"),
EMAIL("mail/fax/email"),
WALK_IN("Walk-in"),
OTHER("Others");
public String value() {
return value;
}
private final String value;
public static final Map<String, CaseOrigin> dbValues = new HashMap<>();
static {
for (CaseOrigin value : values()) {
dbValues.put(value.value, value);
}
}
private CaseOrigin(String value) {
this.value = value;
}
public static CaseOrigin formDbValue(String dbValue) {
return dbValues.get(dbValue);
}
}
最后用的地方到了
@Convert(converter = CaseOriginConverter.class)
private CaseOrigin origin;
这样就OK了。
Java 枚举那点事的更多相关文章
- java枚举和constant使用区别
本文结合<Effective Java>第六章前半部分关于枚举的介绍和自己的理解及实践,讲解了Java枚举的知识点.文章发布于专栏Effective Java,欢迎读者订阅. 前言 你代 ...
- Java 枚举(enum)的学习
Java 枚举(enum)的学习 本文转自:https://blog.csdn.net/javazejian/article/details/71333103 枚举的定义 在定义枚举类型时我们使用的关 ...
- 深入理解Java枚举
深入理解Java枚举 重新认识Java枚举 老实说,挺羞愧的,这么久了,一直不知道Java枚举的本质是啥,虽然也在用,但是真不知道它的底层是个啥样的 直到2020年4月28日的晚上20点左右,我才真的 ...
- Java枚举-通过值查找对应的枚举
一.背景 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. 最近工作中,对接了很多其他的系统,发现对接的同一个系统 ...
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- 【转】掌握java枚举类型(enum type)
原文网址:http://iaiai.iteye.com/blog/1843553 1 背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...
随机推荐
- gitlab HA集群
https://docs.gitlab.com/ee/administration/high_availability/gitlab.html https://about.gitlab.com/hig ...
- GitHub + circleCI 自动构建/自动部署 应用
GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子 比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源 ...
- Gitlab Jenkins WebHook 持续集成配置踩坑记
Jenkins相关介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 目的 配置Gitla ...
- hyperledger fabric各类节点及其故障分析
1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端向endorser提交交易提案,当收集到足够背书后,向排序服务 ...
- 把存储过程SELECT INTO到临时表
在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO1. 使用select into会自动生成临时表,不需要事先创建12 select * into #te ...
- TFS错误-TF249053
前几天规划了下代码结构,改了很多东西后,台式机依然正常访问,但是笔记本一连接或者更改TFS相关资源就报错TF249053.报错点击后不影响正常使用,但是很郁闷.于是查了下资料如下. 错误原因: htt ...
- 【Hibernate学习笔记-4】在hibernate.cfg.xml中配置C3P0数据源
jar包 hibernate.cfg.xml <?xml version="1.0" encoding="GBK"?> <!DOCTYPE h ...
- eterm和easyfare的官网地址
里面有eterm下载和eterm文档资料 运价软件easyfare和easyfare的文档. https://www.eterm.com.cn/caci/eterm/index-cn.jsp http ...
- Jquery阻断事件冒泡(转载)
JQuery阻止事件冒泡 冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 我们在平时的开发过程中,肯定会遇到在一个div(这个div可以是元素)包裹一个div的情况,但是呢,在这两个d ...
- Oracle内存详解之二 Library cache 库缓冲-转载
Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedu ...