spring boot mybatis枚举映射示例代码
前言
在mybatis和mybatisplus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,会把枚举的元素名称拼接到SQL语句里,而由于数据表是int类型,所以在插入等操作时,就会出现异常!
添加枚举处理器
MappedTypes(value={YesOrNo.class}) publicclassUniversalEnumHandler&BaseEnum>extendsBaseTypeHandler { privatefinalClass type; /** *constructwithparameter. */ publicUniversalEnumHandler(Class type){ 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。