MybatisPlus:枚举

  1. 问题引入
  2. 使用MyBatis-Plus的通用枚举
    1. 使用@EnumValue注解
    2. 实验

问题引入

表中的有些字段值是固定的,例如性别(男或女)。

CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`gender` int(11) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

性别字段在数据库中一般用数字表示,但是在Java实体类中,我们会用枚举

@NoArgsConstructor
@AllArgsConstructor
@Data //lombok注解
@TableName("t_user")
public class User {

    @TableId (value = "uid",type = IdType.AUTO)// 标注主键
    private Long id;

    @TableField(value = "name")
    private String username;
    private Integer age;
    private String email;
// 这里是枚举类型,数据库是int类型
    private GenderEnum gender;

//    @TableLogic
    private Integer isDeleted;
}
@Getter
public enum GenderEnum {
    MALE(1, "男"),
    FEMALE(2, "女");
    private Integer gender;
    private String genderName;
    GenderEnum(Integer gender, String genderName) {
        this.gender = gender;
        this.genderName = genderName;
    }
}

如果直接存入数据,会发生错误

@Test
public void testSexEnum(){
    User user = new User();
    user.setUsername("Enum");
    user.setAge(20);
    user.setGender(GenderEnum.MALE);
    //==>  Preparing: INSERT INTO t_user ( name, age, gender ) VALUES ( ?, ?, ? )
    //==> Parameters: Enum(String), 20(Integer), MALE(String)
    //Cause: java.sql.SQLException: Incorrect integer value: 'MALE' for column 'gender' at row 1
    //这里发生了错误,gender存入的是String类型的值-MALE(String)
    userMapper.insert(user);
}

使用MyBatis-Plus的通用枚举

使用@EnumValue注解

@Getter
public enum GenderEnum {
    MALE(1, "男"),
    FEMALE(2, "女");

    @EnumValue // 将注解所标注的值存储到数据库中
    private Integer gender;
    private String genderName;
    GenderEnum(Integer gender, String genderName) {
        this.gender = gender;
        this.genderName = genderName;
    }
}

在老的Mybatis-plus版本中还需要配置扫描通用枚举

mybatis-plus:
    configuration:
        # 配置MyBatis日志
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    type-enums-package: com.xxx.xxx.enums

实验

@Test
public void testSexEnum2(){
    User user = new User();
    user.setUsername("Enum");
    user.setAge(20);
    //设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
    user.setGender(GenderEnum.MALE);
    //==>  Preparing: INSERT INTO t_user ( name, age, gender ) VALUES ( ?, ?, ? )
    //==> Parameters: Enum(String), 20(Integer), 1(Integer)
    userMapper.insert(user);
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com

×

喜欢就点赞,疼爱就打赏