Mybatis在操作 非基础的 Java 对象的时候提供 Type handle 转换类似于字符串转换成 Java 对象,类似 JPA 的 ORM
TypeHandler 是 MyBatis 中用于处理 Java 类型和数据库类型之间转换的接口。通过自定义 TypeHandler,可以实现特定类型的转换逻辑,从而使得 MyBatis 在处理复杂类型时更加灵活。
TypeHandler 是 MyBatis 中用于处理 Java 类型和数据库类型之间转换的接口。通过自定义 TypeHandler,可以实现特定类型的转换逻辑,从而使得 MyBatis 在处理复杂类型时更加灵活。
如何自定义 TypeHandler
创建自定义 TypeHandler 的步骤如下:
- 实现 TypeHandler 接口:首先创建一个类并实现
org.apache.ibatis.type.TypeHandler
接口。 - 重写接口方法:你需要实现四个方法:
setParameter
、getResult
(有三个重载形式)。 - 注册 TypeHandler:在 MyBatis 配置文件中注册自定义的 TypeHandler,或者在 Mapper 文件中指定使用该 TypeHandler。
示例代码
下面是一个简单的示例,展示如何将字符串类型转换为自定义的 Java 对象。
1 | public class CustomTypeHandler implements TypeHandler<CustomType> { |
在 MyBatis 配置文件中注册
1 | <typeHandlers> |
在 configBean下配置
1 | 通过配置注入我们设定的类型处理 |
通过以上步骤,你可以实现自定义的 TypeHandler,并在 MyBatis 中灵活地处理复杂类型的数据转换。
但是对于 Map<K,V>这种格式的数据需要单独配置后解析所有的 map
需要定义一个
private final Type MAP_TYPE;
public MybatisMapTypeHandler() {
this.MAP_TYPE = new TypeToken<Map<K, V>>() {
}.getType();
}
否则建了多个 map的 typehand会报错,如果不用
private final Type MAP_TYPE; 来接可能对于复杂的的 map<key,value<List
这里我使用 gson 来解析.