Mybatis启动报错: No typehandler found for property
时间: 2023-12-07 21:59:21 浏览: 574
Typehandler mybatis
这个报错一般是因为 Mybatis 找不到对应的 TypeHandler 来处理数据库中的某个字段。TypeHandler 是 Mybatis 中用来将 Java 类型与 JDBC 类型进行转换的组件。
解决这个问题的方法是在 Mybatis 的配置文件中配置对应的 TypeHandler。具体的步骤如下:
1. 找到报错的字段,确定它的类型和对应的 JDBC 类型。一般来说,Mybatis 内置了一些常用类型的 TypeHandler,比如 String、Integer、Long 等,如果你使用的类型是内置类型,那么可以直接使用 Mybatis 内置的 TypeHandler。
2. 如果你使用的类型不是内置类型,那么需要自定义一个 TypeHandler。自定义 TypeHandler 的步骤如下:
a. 实现 TypeHandler 接口,或者继承 BaseTypeHandler 类。
b. 在 TypeHandler 中实现两个关键方法:setNonNullParameter 和 getNullableResult。setNonNullParameter 用来将 Java 类型转换为 JDBC 类型,getNullableResult 用来将 JDBC 类型转换为 Java 类型。
c. 将自定义的 TypeHandler 注册到 Mybatis 的配置文件中。
例如,假设你有一个 User 类,其中有一个 Gender 字段,它的类型是枚举类型 GenderEnum。那么你需要定义一个 GenderEnumTypeHandler 类来处理这个字段,具体实现代码如下:
```
public class GenderEnumTypeHandler extends BaseTypeHandler<GenderEnum> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, GenderEnum parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.toString());
}
@Override
public GenderEnum getNullableResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
return GenderEnum.fromString(value);
}
@Override
public GenderEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String value = rs.getString(columnIndex);
return GenderEnum.fromString(value);
}
@Override
public GenderEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex);
return GenderEnum.fromString(value);
}
}
```
其中,GenderEnum.fromString(value) 是一个静态方法,用来将字符串转换为 GenderEnum 类型。
然后,在 Mybatis 的配置文件中注册这个 TypeHandler,具体代码如下:
```
<typeHandlers>
<typeHandler handler="com.example.GenderEnumTypeHandler"/>
</typeHandlers>
```
注意,这里的 handler 属性是 GenderEnumTypeHandler 类的全限定名。
这样,在使用 Mybatis 进行查询时,就不会再出现 No typehandler found for property 的报错了。
阅读全文