MyBatis-Plus通用枚举使用

MyBatis-Plus通用枚举

平常开发中,某些实体对象涉及到状态的变化,一般使用方式有以下2种:

以员工实体举例子

1>使用常量的方式

public class Employee {
    public static final int STATUS_NORMAL  = 0;  //在职
    public static final int STATUS_LEAVE   = 1;  //离职
    //员工状态
    private int status;
    //省略其他属性
}    

在这里插入图片描述

2>使用枚举方式

//员工状态枚举
@Getter
public enum EmployeeStatus {
    NORMAL(0, "在职"), LEAVE(1,"离职");
    private int status;
    private String label;
    private EmployeeStatus(int status, String label){
        this.status = status;
        this.label = label;
    }
}
public class Employee {
    //员工状态
    private EmployeeStatus status = EmployeeStatus.NORMAL;
    //省略其他属性
}    

使用常理操作方式与枚举操作方式其实大同小异,枚举赋予状态更多的操作空间,比如对应的方法,对应的属性,灵活性更高。

MyBatis-Plus 也支持枚举字段操作

3>修改员工在职状态为例子

步骤:
1.创建EmployeeStatus 枚举类与添加status字段

在这里插入图片描述

使用SQL进行修改

在这里插入图片描述

此时会报错---------

解决方案1:

实现 IEnum接口 并提供getValue()方法:
@Getter
public enum EmployeeStatus implements IEnum<Integer> {
    NORMAL(0, "在职"), LEAVE(1,"离职");
    private int status;
    private String label;
    private EmployeeStatus(int status, String label){
        this.status = status;
        this.label = label;
    }
    @Override
    public Integer getValue() {
        //在表status列中存什么值
        return this.status;
    }
}

在这里插入图片描述

方案2:

使用注解方式替换接口的实现。
@Getter
public enum EmployeeStatus{
    NORMAL(0, "在职"), LEAVE(1,"离职");
    
    @EnumValue
    private int status;
    private String label;
    private EmployeeStatus(int status, String label){
        this.status = status;
        this.label = label;
    }
}

在这里插入图片描述

在application.properties 文件配置操作类(一定要写)

明确指定枚举类所有包路径

mybatis-plus.type-enums-package=com.langfeiyes.mp.enums

步骤5:测试

@Test
public void testSave(){
    Employee employee = new Employee();
    employee.setAdmin(1);
    employee.setAge(18);
    employee.setDeptId(1L);
    employee.setEmail("zhangsan@163.com");
    employee.setName("zhangsan");
    employee.setPassword("111");
    //执行状态
    employee.setStatus(EmployeeStatus.LEAVE);
    employeeMapper.insert(employee);
}

执行SQL

==>  Preparing: INSERT INTO employee ( id, status, name, password, email, age, admin, dept_id, del, version ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 1(Integer), zhangsan(String), 111(String), zhangsan@163.com(String), 18(Integer), 1(Integer), 1(Long), 0(Integer), 0(Integer)

此时修改成功

查询转换:

1.表:
在这里插入图片描述
在这里插入图片描述

2.配置文件:和上面一样:

在这里插入图片描述

package cn.js.Enum;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;
import lombok.Getter;

@Getter
public enum SexEnum {
    MALE(1,"男"),
    FEMALE(0,"女");

    @EnumValue
    private int status;
    @JsonValue
    private String label;
    private SexEnum(int status, String label){
        this.status = status;
        this.label = label;
    }


}
package cn.js.entry;

import cn.js.Enum.SexEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * @BelongsProject: MybatisPluse-Test
 * @Author: com.js
 * @CreateTime: 2023-08-28  22:30
 * @Version: 1.0
 * @introduce:
 */

@Data
@TableName("user")
public class User {

    @TableId(value="id", type= IdType.AUTO)
    private Long id;
    private String name;
    private int  age;
    private String email;
    @TableLogic(value = "0", delval = "1")
    private Boolean del;
    private SexEnum sex;


}

2.枚举类:

package cn.js.Enum;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;
import lombok.Getter;

@Getter
public enum SexEnum {
    MALE(1,"男"),
    FEMALE(0,"女");

    @EnumValue
    private int status;
    @JsonValue //----------------->进行序列化操作,不加的话无法转换
    private String label;
    private SexEnum(int status, String label){
        this.status = status;
        this.label = label;
    }


}

在这里插入图片描述

5.测试


    @GetMapping("/getAll")
    public List<User>  getadd(){

        return  userService.getAll();
    }

在这里插入图片描述

在这里插入图片描述

前端传递参数用枚举接受并使用

例:插入

@PostMapping("/add")
    public String add(@RequestBody User user){
        userService.save(user);
        return "保存成功";
    }

在这里插入图片描述
在这里插入图片描述

注意:当我们贴了序列化注解后新增或者其他操作就不能传枚举名了,否则会报错

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。使用原生的Mybatis编写持久层逻辑时,所需要的代码是比较繁琐的,需要定义Mapper接口和Mapper.xml文件,每一个方法都需要编写对应的sql语句,会存在很多大量的重复工作,使用MP之后,对通用的方法做了高度的抽取,避免了很多重复工作,可以非常快速的实现了单表的各种增、删、改、查操作。除此之外,MP还提供了其他的高级功能,如:枚举、插件、ActiveRecord、SQL注入等。 本课程全面讲解了Mybatis-Plus框架的使用,从快速入门到原理分析再到插件的应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法 n 条件构造器 n Oracle 主键Sequence n 通用枚举n ActiveRecord n 逻辑删除 l 插件 n 执行分析插件 n 性能分析插件 n 乐观锁插件 主讲内容 章节一:快速入门 1. Mybatis-Plus简介 2. 快速入门 3. 通用CRUD 4. 配置 5. 条件构造器 章节二:进阶 1. ActiveRecord 2. Oracle 主键Sequence 3. 插件 章节三:高级应用 1. Sql 注入器 2. 自动填充功能 3. 逻辑删除 4. 通用枚举 5. 代码生成器 6. MybatisX 快速开发插件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值