前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MybatisPlus通用枚举

MybatisPlus通用枚举

作者头像
阿超
发布2022-08-17 19:43:02
5180
发布2022-08-17 19:43:02
举报
文章被收录于专栏:快乐阿超快乐阿超

胡马依北风,越鸟巢南枝。一一《古诗十九首》

在项目开发中,经常数据库中的一个字段对应一个枚举

对于这些枚举,我们要使用数据库将他们的值映射起来

MybatisPlus为我们提供了优雅的解决方案

只需要配置中添加枚举处理器,开启通用枚举支持

image-20210808175924074
image-20210808175924074
代码语言:javascript
复制
mybatis-plus:
  #指定Mybatis的Mapper文件
  mapper-locations: classpath:mappers/*xml
  #指定Mybatis的实体目录
  type-aliases-package: com.ruben.pojo.po
  configuration:
    # 开启mybatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 开启通用枚举支持,默认使用ordinalType
    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler

然后如果是对于一些简单的枚举,例如使用ordinal和数据库的值映射的枚举,我们可以直接使用

比如此处UserDetail中使用GenderEnum

image-20210808180139829
image-20210808180139829

在数据库中:0对应女,1对应男

代码语言:javascript
复制
package com.ruben.simplescaffold.enumration;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 性别枚举
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/8/5 15:35
 */
@Getter
@AllArgsConstructor
public enum GenderEnum {
    /**
     * Cheating the compiler.
     */
    WOMAN("女"),
    MAN("男");

    private final String desc;
}

我们直接执行查询,可以看到是能成功映射上

代码语言:javascript
复制
package com.ruben.simplescaffold;

import com.ruben.simplescaffold.service.IUserDetailService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * Springboot测试类
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/7/11 0011 18:11
 */
@SpringBootTest
class SimpleScaffoldApplicationTests {

    @Resource
    private IUserDetailService userDetailService;

    @Test
    void contextLoads() {
        System.out.println(userDetailService.list());
    }

}
image-20210808180301245
image-20210808180301245

但如果我们需要使用其他的值,我们也可以使用如下方式:

1.注解方式

代码语言:javascript
复制
package com.ruben.simplescaffold.enumration;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 性别枚举
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/8/5 15:35
 */
@Getter
@AllArgsConstructor
public enum GenderEnum {
    /**
     * Cheating the compiler.
     */
    MALE("男", 1),
    FEMALE("女", 0);


    private final String desc;
    @EnumValue
    private final Integer value;
}

注意此处对应数据库字段的长度为tinyint不指定长度,如果指定长度为1,则默认会失效

image-20210808183452635
image-20210808183452635

2.以及实现com.baomidou.mybatisplus.annotation.IEnum接口

代码语言:javascript
复制
package com.ruben.simplescaffold.enumration;

import com.baomidou.mybatisplus.annotation.IEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 性别枚举
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/8/5 15:35
 */
@Getter
@AllArgsConstructor
public enum GenderEnum implements IEnum<Integer> {
    /**
     * Cheating the compiler.
     */
    MALE("男", 1),
    FEMALE("女", 0);


    private final String desc;
    private final Integer value;
}

注意这里需要实现getValue方法,我使用了@Getter注解所以没有写

同样可以看到我们的gender数据库中存储的值为1

映射成为了我们的MALE

image-20210808183751651
image-20210808183751651
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档