spring boot mybatis枚举映射示例代码
前言
在mybatis和mybatisplus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,会把枚举的元素名称拼接到SQL语句里,而由于数据表是int类型,所以在插入等操作时,就会出现异常!
添加枚举处理器
MappedTypes(value={YesOrNo.class})
publicclassUniversalEnumHandler&BaseEnum>extendsBaseTypeHandler{
privatefinalClasstype;
/**
*constructwithparameter.
*/
publicUniversalEnumHandler(Classtype){
if(type==null){
thrownewIllegalArgumentException("Typeargumentcannotbenull");
}
this.type=type;
}
@Override
publicvoidsetNonNullParameter(PreparedStatementps,inti,Eparameter,JdbcTypejdbcType)
throwsSQLException{
ps.setInt(i,parameter.getCode());
}
@Override
publicEgetNullableResult(ResultSetrs,StringcolumnName)throwsSQLException{
intcode=rs.getInt(columnName);
returnrs.wasNull()?null:EnumUtils.codeOf(this.type,code);
}
@Override
publicEgetNullableResult(ResultSetrs,intcolumnIndex)throwsSQLException{
intcode=rs.getInt(columnIndex);
returnrs.wasNull()?null:EnumUtils.codeOf(this.type,code);
}
@Override
publicEgetNullableResult(CallableStatementcs,intcolumnIndex)throwsSQLException{
intcode=cs.getInt(columnIndex);
returncs.wasNull()?null:EnumUtils.codeOf(this.type,code);
}
}
在配置文件指定处理器
mybatis-plus: typeHandlersPackage:cn.pilipa.account.cerebrum.client.enums#处理器所在包,我是把枚举处理器放在枚举包里
定义代表枚举键值的接口
publicinterfaceBaseEnum,T>{ publicIntegergetCode(); publicStringgetText(); }
定义一下枚举
publicenumYesOrNoimplementsBaseEnum{
Yes(1,"是"),
No(0,"否");
privateIntegercode;
privateStringtext;
YesOrNo(Integercode,Stringtext){
this.code=code;
this.text=text;
}
@JsonCreator
publicstaticYesOrNojsonCreate(Integercode){
returnEnumUtils.codeOf(YesOrNo.class,code);
}
@Override
publicIntegergetCode(){
returnthis.code;
}
@Override
publicStringgetText(){
returnthis.text;
}
@JsonValue
publicIntegergetCodeStr(){
returnthis.code;
}
}
在实体中定义枚举类型字段
/** *是否为国民. */ privateYesOrNonaturalBorn;
生成的SQL语句
==>Preparing:INSERTINTOemployee_info(id,name,credit_number,status,first_time,tax_code,natural_born)VALUES(?,?,?,?,?,?,?) 2019-09-0516:56:38.991DEBUG[accounting-client,,,]92833---[main]c.p.a.c.c.m.EmployeeInfoMapper.insert: ==>Parameters:1169534796253630466(Long),段会涛(String),130523199011111219(String),1(Integer),2019-09-05(Date),130523199011111219(String),0(Integer)
从上面结果中看到,我们的natural_born对应的值已经是int类型了,表示处理器成功了!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。