本文使用的是 Mybatis-Plus 从 3.5.2 版本来实现通用枚举配置, 从3.5.2版本开始只需使用 @EnumValue 注解枚举属性,就可以实现一系列功能,而不需要其他配置。
Mybatis-Plus 3.5.2 之前的版本可以查看这篇文章有详细的介绍:链接地址
这里已性别为例,性别枚举:男用(1)表示,女用(2)表示
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
声明通用枚举属性
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author CuMamba
* @date 2024/3/18
*/
@AllArgsConstructor
@Getter
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
@EnumValue // 标记数据库存的值是code
private final Integer code;
@JsonValue // 标记响应json值(前端展示)
private final String name;
}
实体属性使用枚举类型
import com.baomidou.mybatisplus.annotation.*;
import com.example.test.enums.SexEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 访客登记表
* </p>
*
* @author CuMamba
* @since 2024-03-18
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("visitor")
public class Visitor implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private SexEnum sex;
private String phone;
private Integer visitorCount;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitTime;
private String content;
@TableField(fill = FieldFill.INSERT)
private Integer creatorId;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer updaterId;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
数据库表结构
create table student.visitor
(
id int auto_increment
primary key,
name varchar(64) not null comment '姓名',
sex tinyint not null comment '性别',
phone varchar(11) not null comment '电话',
visitor_count int not null comment '访客人数',
visit_time datetime default CURRENT_TIMESTAMP not null comment '来访时间',
content varchar(255) not null comment '事情',
creator_id int unsigned not null comment '创建人',
create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updater_id int unsigned not null comment '更新人',
update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间'
)
comment '访客登记表' charset = utf8;
添加controller校验
添加新增和查询接口
import com.example.test.entity.Visitor;
import com.example.test.mapper.VisitorMapper;
import com.example.test.utils.R;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author CuMamba
* @date 2024/3/18
*/
@RestController
public class TestController {
@Resource
private VisitorMapper visitorMapper;
@PostMapping("/visitor")
public R add(@RequestBody Visitor visitor) {
visitorMapper.insert(visitor);
return R.success(visitor);
}
@GetMapping("/visitor/{id}")
public R detail(@PathVariable Integer id) {
Visitor detail = visitorMapper.selectById(id);
return R.success(detail);
}
}