一、mybatis-plus在实体中加入其他不属于数据库表的字段注释和数据类型的转换
数据库:MySQL 、表:t_society_problems、字段:PROBLEM_TYPE (题干类型)、 类型:int
业务描述:在导入Excel文档时候,数据库表中题干类型字段为int型,数据库表中存储的格式为:1(单选)、2(多选)、3(判断),但是接收到的数据为String类型。
问题分析:需要将接收到的String类型转为int类型再将数据存储到数据库中?因为数据库中只有PROBLEM_TYPE (题干类型)字段,当我们接收到前端传过来的数据也不可能用int类型的PROBLEM_TYPE 去接收String类型的题库类型数据。所有我决定在实体中重新定义一个非数据库表t_society_problems的String类型字段,然后通过这个字段类接收从前端传过来的数据。对这个字段可以通过@TableField
注解中的exist
属性是注释该字段是否属于该表的字段,默认值为true。
Excel的数据字段:
具体步骤:
1、在实体中定义字段:@TableField
注解中的exist
属性是注释该字段是否属于该表的字段,默认值为true
/**
* 1单选 2多选 3判断
*/
@Excel(name = "答题类型 int", width = 15)
@ApiModelProperty(value = "答题类型 int")
@Column(name="PROBLEM_TYPE")
private Integer problemType;
@Excel(name = "答题类型", width = 15)
@ApiModelProperty(value = "答题类型")
@TableField(exist = false)
private String problemTypeS;
2、导入文档的工具类对数据字段PROBLEM_TYPE 的处理:
对应的枚举类:
public enum OptionEnum implements BaseEnum {
PROBLEM_TYPE_ONE(1,"单选"),
PROBLEM_TYPE_MANY(2,"多选"),
PROBLEM_TYPE_JUDGE(3,"判断");
private final int code;
private final String info;
OptionEnum(int code, String info){
this.code = code;
this.info = info;
}
@Override
public int getCode() {
return this.code;
}
@Override
public String getInfo() {
return this.info;
}
@Override
public String getCodeToString() {
return String.valueOf(code);
}
}
枚举转换接口:
public interface BaseEnum {
/***
* @Title: getCode
* @Param: []
* @description: 获取编码
* @author: TianLong
* @date: 2023/2/15 14:56
* @return: short
* @throws:
*/
int getCode();
/***
* @Title: getInfo
* @Param: []
* @description: 获取文本
* @author: TianLong
* @date: 2023/2/15 14:56
* @return: java.lang.String
* @throws:
*/
String getInfo();
/***
* @Title: getCodeToString
* @Param: []
* @description: 获取字符串格式的编码
* @author: TianLong
* @date: 2023/2/15 14:56
* @return: java.lang.String
* @throws:
*/
String getCodeToString();
}
//对题干类型进行枚举转换
if (StringUtils.isNotBlank(listTSocietyProblems.get(i).getProblemTypeS()) && listTSocietyProblems.get(i).getProblemTypeS().equals("单选")){
tSocietyProblems = listTSocietyProblems.get(i).setProblemType(OptionEnum.PROBLEM_TYPE_ONE.getCode());
}
if (StringUtils.isNotBlank(listTSocietyProblems.get(i).getProblemTypeS()) && listTSocietyProblems.get(i).getProblemTypeS().equals("多选")){
tSocietyProblems = listTSocietyProblems.get(i).setProblemType(OptionEnum.PROBLEM_TYPE_MANY.getCode());
}
if (StringUtils.isNotBlank(listTSocietyProblems.get(i).getProblemTypeS()) && listTSocietyProblems.get(i).getProblemTypeS().equals("判断")){
tSocietyProblems = listTSocietyProblems.get(i).setProblemType(OptionEnum.PROBLEM_TYPE_JUDGE.getCode());
}
运行结果: