mybatis自定义枚举处理,mybatis 枚举类型处理
00-1010背景现状期望实现一个通用枚举接口mybaits枚举处理器配置枚举处理器实体类查询映射器具有枚举类型字段
00-1010在Spring boot项目的开发中,我们经常会遇到需要枚举的场景,比如描述状态、性别、类型等相关字段。通常这些字段在数据库中是以tinyint类型存在的,比如:0:女性,1:男性;或者,0:设备断开,1:设备在线。如果我们在系统中也处处使用int,那么在后期的维护中理解数字会非常困难,所以我们通常使用枚举来循环系统中的字段,而我们则使用数字来存储。
以上,由于数据库存储字段的类型与我们在系统中流通的不同,我们需要实现一个它们之间自动转换的功能,也就是题目中提到的枚举处理器。
00-1010如果我们用所有的数字在系统中循环,最终的系统代码会是这样的:
If(status==1){ //随着时间的推移,谁来告诉我状态1代表什么.} if(status==0){//0还代表什么状态.} .以上操作会导致代码的可读性非常低,非常需要依靠其中数字的注释进行编码。
00-1010希望类型、性别和状态等字段都可以使用枚举类型来提高代码的可维护性。考虑到我们大多数人在使用枚举的时候会用到ONLINE(1, ONLINE )和OFFLINE(0, dropped ),我们可以总结出一个通用的枚举接口,由后续的类似枚举类来实现。
00-1010为了满足预期的功能,通过mybatis的一个通用枚举接口和枚举处理器实现了在业务系统中使用枚举类型和在mysql中使用数值类型的功能。
00-1010简单粗暴的把这个通用枚举接口命名为KeyValueEnum:
公共接口KeyValueEnum { int getKey();string getValue();}基于此接口实现一个状态枚举类:
公共枚举状态枚举实现键值枚举{online (1, online ),OFFLINE(0, dropped );私有int键;私有字符串值;StatusEnum(int key,String value){ this . key=key;this.value=value} @ Override public int getKey(){ return key;} @Override公共字符串getValue(){ return value;}}}这样,所有类似的接口都可以使用getKey()和getValue()方法来获取相关的数值。
00-1010 @ Mapped Types(value={ status . class,sex . class })//此处添加了所有枚举类型。公共类EnumTypeHandlerE扩展KeyValueEnum扩展BaseTypeHandlerE {私有类type私有E[]枚举;public EnumTypeHandler(class type){ this . type=type;this . enums=type . getenumconstants();} @ Override public void setNonNullParameter(prepared statement prepared statement,int i,KeyValueEnum keyValueEnum,JdbcType jdbcType)抛出SQLException { prepared statement . setint(I,key value enum . getkey());} @ Override public E getNullableResult(ResultSet ResultSet,int i)抛出SQLException { int key=ResultSet . getint(I);返回get enum(key);} @ Override public E getNullableResult(ResultSet ResultSet,String s)抛出SQLException { int key=ResultSet . getint(s);返回get enum(key);} @ Override public E getNullableResult(callable statement callable statement,int i)抛出SQL exception { int key=callable statement . getint(I);返回get enum(key);} private E get enum(int key){ for(E key value : enums){ if(key value . getkey()==key){ return key value;} }返回null}}枚举处理器是通过继承mybatis自带的BaseTypeHandler抽象类实现的,其中包含的具体方法可以参考mybatis的BaseTypeHandler文档。
需要注意的是,每增加一个需要存储在数据库中的枚举类型,都需要在@ mapped types(value={ status . class,sex.class})的注释中增加一个对应的枚举类。
00-1010 # application . yamlmmybatis 3360 configuration 3360 map-score-to-camel-case 3360 true # underline to hump type-handlers-package : xxxx . XXX . handler . mybatistypehandler #配置刚刚编辑的枚举处理器。
目录
@Datapublic类设备{ private long id私人身份状况;}期望的目标是直接通过数据库查询对应的枚举类型。
背景
公共接口deviceMapper { @Results(id=aaa ,value={ @Result(id=true,column=id ,property=id ),@Result(column=status ,property= status )})@ Select( Select * from Device where id=# { id } )Device getdevice byid(long id);}通过mapper查询,最终可以实现数据库tinyint类型查询,然后转换成实体类字段对应的枚举类型。
关于springboot mybatis枚举处理器的实现,本文到此结束。有关springboot mybatis枚举处理器的更多信息,请搜索以前的热门IT文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。