Mybatis-Plus、达梦 、通用枚举
前言
Mybatis-Plus 不同的版本,通用枚举配置是不一样的,稍早一些的需要实现 IEnum 接口,并且需要在配置文件中配置 typeEnumsPackage 或者编写配置类(详情见 MP官网-通用枚举 )。
而 Mybatis-Plus 从 3.5.2 版本开始只需使用 @EnumValue 注解枚举属性,本文也是基于3.5.2做了一个演示!
技术版本 pom.xml
<!-- 达梦8 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.141</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
之前在这里用的达梦版本为8.1.2.79 ,就一直报错 “Error attempting to get column ‘gender’ from result set. Cause: dm.jdbc.driver.DMException: 不支持该数据类型”,后来改为8.1.2.141 就好了
代码展示
1. 枚举类
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum GenderEnum{
MAN(0, "男"),
WOMAN(1, "女");
@EnumValue // 1. 标记此值是mybatis枚举类型与数据存储值映射
private final int value;
@JsonValue // 2. 若不配置此注解,查询数据库对应 0-MAN,1-WOMAN,配置后,查询数据库 0-‘男’,1-‘女’
private final String desc;
GenderEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
@Override // 3. 重写toString方法
public String toString() {
return "GenderEnum{" +
"value=" + value +
", desc='" + desc + '\'' +
'}';
}
}
2. entity类
@TableName("SYS_STUDENT")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@TableId(value = "USER_ID", type = IdType.AUTO)
private BigInteger userId;
@TableField("USERNAME")
private String username;
@TableField("PASSWORD")
private String password;
@TableField("NICKNAME")
private String nickname;
@TableField("MOBILE_NUMBER")
private String mobileNumber;
@TableField("EMAIL_ADDRESS")
private String emailAddress;
@TableField("GENDER")
// 1. 数据库类型 为int,这里改成上面定义的枚举类型,如果需要配置 xxMapper.xml,也需要添加该字段信息,字段类型依旧是数字Integer
private GenderEnum gender;
}
3. controller
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@Operation(summary = "getAllStu", description = "获取所有学生信息")
@RequestMapping(value = "/getAllStu",method = RequestMethod.GET)
public Response<PageRequest> getAllStu(PageRequest pageRequest){
Response<PageRequest> response = ResponseGenerator.genSuccessResponse(pageRequest);
List<Student> list = studentService.list();
response.setData(list);
return response;
}
@Operation(summary = "save", description = "添加学生信息")
@RequestMapping(value = "/save",method = RequestMethod.PUT)
public Response<PageRequest> save(@RequestBody Student student,PageRequest pageRequest){
boolean save = studentService.save(student);
Response<PageRequest> response;
if (save){
response = ResponseGenerator.genSuccessResponse(pageRequest);
response.setData(student);
}else {
response = ResponseGenerator.genFailResponse("插入失败");
}
return response;
}
}