mysql enum(枚举) 类型在springboot+mybatis 系统中的运用

原创文章,欢迎转载:http://miao.blog/article/mysql-enum-in-springboot-mybatis

1.首先我们定义一个enum(枚举)字段

CREATE TABLE `repository` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) unsigned NOT NULL COMMENT '创建用户ID',
  `name` varchar(255) NOT NULL COMMENT '仓库名称',
  `protocol` enum('FILE','SVN','HTTP','HTTPS') NOT NULL DEFAULT 'FILE' COMMENT '协议',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

重点看这一行,我们定义 protocol 字段有4个枚举值

`protocol` enum('FILE','SVN','HTTP','HTTPS')


2.然后对应的Enum类

package com.marssvn.utils.enums;

/**
 * svn protocol
 */
public enum ESVNProtocol {
    /**
     * file:///
     */
    FILE("file"),

    /**
     * svn://
     */
    SVN("svn"),

    /**
     * http://
     */
    HTTP("http"),

    /**
     * https://
     */
    HTTPS("https");

    private String value;

    ESVNProtocol(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    public String getPrefix() {
        return this.value + "://";
    }
}


3.然后 Entity 中的代码如下

private ESVNProtocol protocol;


4.mybatis的查询sql

<select id="selectAll">
    SELECT
        rep.`id`,
        rep.`name`,
        rep.`protocol`,
    FROM repository
</select>

就这样,不需要其他特殊处理,查询结果会自动映射为枚举类型。

有些应用场景需要输出枚举对应的值,比如API返回的结果为枚举的值时,直接在对应的javabean中处理即可,如下:

    /**
     * protocol
     */
    @JsonIgnore
    private ESVNProtocol protocol;

    /**
     * protocol lower
     */
    @JsonProperty("protocol")
    private String protocolLower;

    /**
     * get protocol lower
     *
     * @return protocol lower
     */
    public String getProtocolLower() {
        return this.protocol.getValue();
    }
推荐阅读
使用springboot框架对请求参数验证时,实现不同国家区域返回对应语言的消息内容
用@CacheEvict删除缓存只能删除指定key的缓存,有些情况需要根据前缀删除所有key的时候,用@CacheEvict就做不到了,所以我们自定义一个@CacheRemove来处理根据前缀模糊删除所有cache(支持Spring EL表达式)
评论
12

12

2018-12-18

俺的沙发