TypeHandler是按照字面意义的类型处理器
引用官方文档的描述:当准备安排中的参数或从结果中删除值时,类型处理器的值将以合适的方式以合适的方式以合适的方式转换为Java类型。
Mybatis有一些默认类型处理器,可以参考官方文档
在开发过程中,当默认typehandler无法满足需求时,例如,在遇到Mybatis不支持的数据类型或需要特殊处理的类型转换时,您需要自己自定义相应的类型Handler
作者将在以下代码实施中完成以下情况下的TypeHandler:
Mybatis提供界面和类
官方文档给出的示例已继承,作者还在此处使用此方法
让我们首先观察官员:
方法名称和代码简单明了。可以看出,只有四种方法的覆盖范围才能完成以实现自定义类型Handler
假设用户表T_user设计如下:
1adminadmin,与用户相对应的JAVA类是:
标签属性在数据库中使用逗号分隔字符串保存,但是与用户类相对应的相应属性是字符串数组
可以创建以解决类型转换问题:
如何创建包含中文名称的枚举,您可以参考Mybatis中的Java类和枚举
首先创建一个工具类以根据代码获得枚举实体:
与3.1中的情况不同,枚举的特定类型不确定,因此我们需要使用通用方法来处理类型Handler
创造:
尽管名称已概括,但在编译过程中实际上删除了类型的擦除
简而言之,对于遗传类型类型Handler,我们需要声明一个属性来识别特定类型并创建相应的构造函数
下一个和3.1被重写四种方法:
直接完成上述代码后,它将引发一个例外:
生成的源代码如下:
错误报告的原因很简单,但是找不到ValueNameEnumTypeHandler的构造函数
首先,我们必须了解Java类构造函数的机制:如果定义了构造函数,则使用定义,否则空气结构函数将默认生成
在3.1中,我们不定义构造函数,会自动生成空构造函数,并且不会引发异常
但是定义了构造函数,没有指定javatype,自然会引发例外
有两种解决方案:
作者推荐第二个,因为列举类别属性的第一种方法将产生NPE(空指针异常),Mybatis官员还提供了注释来指定Javatype:
在上一章中,我们完成了编码以实现自定义类型Handler,但是完成的TypeHandler无法使用它,我们需要手动配置
有两种配置方法:本地和全局使用
例如:
在esultmap中使用:
在语句中使用:
使用配置文件指定处理程序软件包名称:
请注意,此配置类型是字符串,只能配置一个软件包,建议使用以下方法
手写配置类:
不适合全局配置,它将在所有javatype上用作字符串[]属性