java枚举和mybaits-plus结合实现映射输出和存储

  • 需求,就是我们需求统一管理字段,比如我们规定a是开始 b是结束,那么在数据库存储的时候就可以存储单个字符

枚举

  • 我们先来了解下Java的枚举
  • Java的枚举我简单理解就是特殊的类,类所有的写法,枚举也可以有~

简单枚举

public enum enum1 {
    RED, GREEN, BLANK, YELLOW;

    //main函数为测试内容,你可以直接删除才是真正的枚举类
    public static void main(String[] args) {
        System.out.println(enum1.BLANK);//输出BLANK
    }
}

带构造函数的枚举

  • 就是可以存储多个数据啦
    • 需求就是我们希望这个枚举可以有多个信息,而不是变量名和值一样,比如我规定a代表code为200,message为"成功’这种
//你可以理解为带构造函数的存储的信息如下~
a -> {
    code:200,
    message:"成功",
}
public enum enum2 {
    //注意,这里不是构造函数名称,而是自定义的枚举名称,如SUCCESS,FAIL
    SUCCESS(200,"成功"),//注意要逗号分隔,最后一个不添加逗号
    FAIL(500,"失败")
    //分号最好另起一行,隔断作用
    ;
    
    //添加成员变量
    private int code;//代码
    private String message;//消息
    //添加构造函数
    enum2(int code,String message){
        this.code = code;
        this.message = message;
    }

    //添加Getter,当然你也可以使用lombok
    public int getCode(){
        return this.code;
    }
    public String getMessage(){
        return this.message;
    }


    //main函数为测试内容,你可以直接删除才是真正的枚举类
    public static void main(String[] args) {
        enum2 one = enum2.FAIL;
        System.out.println(one.getCode());//输出500
        System.out.println(one.getMessage());//输出失败
    }
}

结合mybatis-plus实现枚举映射存储

  • 就是数据库存储a,然后用户看到的是更复杂的数据
    • 比如数据库存储1 后面查询返回给用户的实际是"已开始"
  • 目前依赖如下,可以看到mybatis-plus为3.5.12

配置

  • 貌似3.5不需要配置什么枚举扫描类的包和handler了,只需要添加@EnumValue和@JsonValue就可以

使用

  • 创建枚举
    • 这里创建了枚举EnumTest3
@Getter
public enum EnumTest3 {
    END(-1,"中止"),
    STARTED(1,"已开始"),
    COMPLETE(2,"已结束"),
    PROCESS(3,"流程中");
    ;
    @EnumValue
    private int code;//实际存入数据库的
    //@JsonValue记得添加,否则不会自动映射!
    @JsonValue
    private String status;//用户看到的
    EnumTest3(int code,String status){
        this.code = code;
        this.status = status;
    }
}

  • entity更换为枚举类型
    • entity就是数据库和实体类的对应
import com.example.demo_6.enums.EnumTest3;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("enum_test")
public class EnumTest {
    @TableId(type = IdType.AUTO)
    private int id;
    private EnumTest3 status;//测试枚举字段
}

  • TestEnumReq类内容
package com.example.demo_6.Req;

import com.example.demo_6.enums.EnumTest3;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestEnumReq {
    //用户传递过来的数据
    private EnumTest3 status;
}

  • controller测试
package com.example.demo_6.controller;

import com.example.demo_6.Req.TestEnumReq;
import com.example.demo_6.entity.EnumTest;
import com.example.demo_6.enums.EnumTest1;
import com.example.demo_6.enums.EnumTest3;
import com.example.demo_6.mapper.EnumTestMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/enumTest")
public class TestEnumController {
    @Autowired
    EnumTestMapper enumTestMapper;
    @PostMapping("/insert")
    //这个是测试前端传递的参数有没有正确存储到数据库
    //这样子前端可以传1也可以传递"已开始"
    //这样子前端传递 "已开始"就只会在数据库存储1 , "已结束"就只会在数据库存储2
    public int one(@RequestBody TestEnumReq enumReq) {
        EnumTest test1 = new EnumTest();
        test1.setStatus(enumReq.getStatus());
        return enumTestMapper.insert(test1);
    }
    @PostMapping("/list")
    //这个是测试返回给前端的数据有没有映射上去,比如数据库里面是1,返回给用户的"已开始"
    public List<EnumTest> list() {
        return enumTestMapper.selectList(null);
    }
}

  • 数据库内容

  • 调用**/enumTest/list**接口输出内容

参考学习文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未成年梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值