当前位置: 首页 > 网络应用技术

Mybatis自定义类型Handler

时间:2023-03-06 22:39:09 网络应用技术

  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上用作字符串[]属性