MyBatis-Plus之枚举
博主 默语带您 Go to New World.
✍ 个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
MyBatis-Plus是基于MyBatis的增强工具,用于简化MyBatis的开发。在MyBatis-Plus中,对枚举(Enum)的支持相对比较方便,可以更容易地将枚举类型映射到数据库中的字段。以下是关于MyBatis-Plus中枚举的一些要点:
-
枚举映射: MyBatis-Plus允许将Java中的枚举类型映射到数据库中的字段。通过
@EnumValue和@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。 -
枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。例如,数据库中的一个整数字段可以使用枚举来表示,而不仅仅是普通的整数类型。
-
自动类型转换: 使用MyBatis-Plus,当将枚举对象插入数据库或从数据库中检索时,自动进行枚举对象与数据库字段值的转换。这意味着您无需手动执行转换操作。
-
枚举值转换: 通过在枚举类中定义对应的值,您可以确保枚举在数据库中的存储值与实际枚举值一致。这样,您可以保持代码的一致性和可读性。
-
常规用法: 在MyBatis-Plus中,枚举的使用方式类似于普通的字段类型。您可以在实体类的属性中使用枚举类型,然后在Mapper中执行数据库操作。
-
代码示例: 假设您有一个订单实体类,其中包含一个枚举类型的支付状态。您可以使用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 )