1) 介绍
当数据库的字段类型和JavaBean的数据类型不一致时,需要通过MyBatis的TypeHandler来映射
2) 实现方式
interface TypeHandler<T> 是一个接口,也可以继承自其实现类
需要实现(实现的TypeHandler接口)两个方法:
void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
该方法用于设置填充占位符时的规则
T getResult(ResultSet rs, String columnName) throws SQLException;
该方法用于设置封装JavaBean的属性的规则
或重写(继承了实现自TypeHandler的实现类)两个方法:
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
throws SQLException {}
该方法用于设置填充占位符时的规则
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {}
该方法用于设置封装JavaBean的属性的规则
同时需要在MyBatis的配置文件中,注册TypeHandler
<typeHandlers>
<typeHandler handler="TypeHandler的全类名" javaType="对应的JavaBean的属性的数据类型" />
</typeHandlers>
3) 示例
映射规则:字段值为1,则JavaBean的属性为true;字段值为0,则JavaBean的属性为false
【TypeHandler】
public class MyTypeHandler extends BooleanTypeHandler {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
if (null != parameter) {
int x = (true == parameter) ? 1 : 0;
ps.setInt(i, x);
}
}
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
return 1 == rs.getInt(columnName);
}
}
【MyBatis的注册配置】
<typeHandlers>
<typeHandler handler="???.MyTypeHandler" javaType="java.lang.Boolean" />
</typeHandlers>