MyBatis-Plus之枚举

818 阅读4分钟

MyBatis-Plus之枚举


博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


在这里插入图片描述

MyBatis-Plus是基于MyBatis的增强工具,用于简化MyBatis的开发。在MyBatis-Plus中,对枚举(Enum)的支持相对比较方便,可以更容易地将枚举类型映射到数据库中的字段。以下是关于MyBatis-Plus中枚举的一些要点:

  1. 枚举映射: MyBatis-Plus允许将Java中的枚举类型映射到数据库中的字段。通过@EnumValue@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。

  2. 枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。例如,数据库中的一个整数字段可以使用枚举来表示,而不仅仅是普通的整数类型。

  3. 自动类型转换: 使用MyBatis-Plus,当将枚举对象插入数据库或从数据库中检索时,自动进行枚举对象与数据库字段值的转换。这意味着您无需手动执行转换操作。

  4. 枚举值转换: 通过在枚举类中定义对应的值,您可以确保枚举在数据库中的存储值与实际枚举值一致。这样,您可以保持代码的一致性和可读性。

  5. 常规用法: 在MyBatis-Plus中,枚举的使用方式类似于普通的字段类型。您可以在实体类的属性中使用枚举类型,然后在Mapper中执行数据库操作。

  6. 代码示例: 假设您有一个订单实体类,其中包含一个枚举类型的支付状态。您可以使用MyBatis-Plus来映射这个枚举字段到数据库中。

    public class Order {
        private Long id;
        private PaymentStatus paymentStatus;  // 枚举类型
        // 其他属性和方法...
    }
    
    public enum PaymentStatus {
        UNPAID, PAID, REFUNDED;
    }
    

    您可以使用@EnumValue@EnumValue注解来配置枚举字段的映射。

    @TableName("order_table")
    public class Order {
        // ...
        @EnumValue // 标记要映射的枚举类型
        private PaymentStatus paymentStatus;
        // ...
    }
    

通过MyBatis-Plus的枚举支持,您可以更加方便地管理枚举类型与数据库字段之间的映射,减少手动转换的复杂性,提高代码的可读性和一致性。


文章顺序及整体目录可查看(点我即可)

1.0 MyBatis-Plus之枚举

CREATE TABLE `t_user`  (
  `uid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `is_delect` int(255) NULL DEFAULT 0 COMMENT '是否删除',
  `sex` int(255) NULL DEFAULT NULL COMMENT '性别',
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

在这里插入图片描述
添加性别

表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现

创建枚举 类

package com.example.enums;

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

@Getter
public enum SexEnum {

    MALE(1, "男"),
    FEMALE(2, "女");

    @EnumValue //将注解所标识的属性的值存储到数据库中
    private int sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

在这里插入图片描述

package com.example.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.example.enums.SexEnum;
import lombok.*;

/**
 *
 */
//get/set 有参无参 @Data=get+set@| Setter+@Getter
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

     //我们使用的是数据库自增
     @TableId(value="uid",type= IdType.AUTO)
     private Long id;

     @TableField("user_name")
     private String name;

     private Integer age;

     private String email;

     @TableLogic
     private int isDelect;

     private SexEnum sexEnum;

}

配置扫描通用枚举

spring:
  # 配置数据源信息
  datasource:
    #配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    #配置连接数据的信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false
    username: root
    password: root






mybatis-plus:
  configuration:
    #加入mybatis 日志查看执行语句sql语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  global-config:
    db-config:
      table-prefix: t_
      #设置统一的主键生成策略
      id-type: auto
     #配置实体类类型别名对应的包(也就是实体类和mapper.xml的返回的对象对应)
  type-aliases-package: com.example.pojo
  # 扫描通用枚举的包
  type-enums-package: com.example.enums

创建测试类:

package com.example;

import com.example.enums.SexEnum;
import com.example.mapper.UserMapper;
import com.example.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisPlusEnumTest {

    @Autowired
    private UserMapper userMapper;


    @Test
    public void test(){
         User user = new User();
        user.setName("admin");
        user.setAge(33);
        user.setSex(SexEnum.MALE);
        int result = userMapper.insert(user);
        System.out.println("result:"+result);

    }


}

在这里插入代码片


==>  Preparing: INSERT INTO t_user ( user_name, age, is_delect, sex ) VALUES ( ?, ?, ?, ? )
==> Parameters: admin(String), 33(Integer), 0(Integer), 1(Integer)
<==    Updates: 1

枚举的学习就到这里结束;大家也会说上班可能用不到;
但是正常规范的代码,例如状态码,数据字典等相关都需要类似接口来实现得到;

补充下:有人提问我这边回复下内容
下面的2个方法即可获取;


    @Test
    public void test(){
         User user = new User();
        user.setName("admin");
        user.setAge(33);
        user.setSex(SexEnum.MALE);
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("user的值==》"+user);
        System.out.println("user中性别的值==》"+user.getSex().getSexName());
    }

在这里插入图片描述

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )