作用:
就是解决jdbcType和javaType的转化,往往用于枚举类即平常我们所说的字典表。
ps:其实在日常开发中很少使用,除非你在po里定义了枚举字段;一般我们都是利用数据库的函数比如Oracle decode,mysql使用
when case else end 这样语句解决
那为啥还要学习呢?
是的,日常开发确实用不到,但如果你想学习ORM框架还是要了解一下的,因为ORM就是解决表的字段到javabean的成员变量的映射
此处主要介绍枚举类如何映射到数据库的字典字段
EnumTypeHandler和EnumOrdinalTypeHandler
EnumTypeHandler是以字符串形式枚举类的实例名和数据库字段对应;但出库还是枚举对象
EnumOrdinalTypeHandler:就是把字段入库,出库依然还是枚举对象
自定义枚举类:实现TypeHandler接口重写其方法即可
public class SexEnumTypeHandler implements TypeHandler {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
preparedStatement.setInt(i,((SexEnum)o).getId());
}
@Override
public Object getResult(ResultSet resultSet, String s) throws SQLException {
int id = resultSet.getInt(s);
return SexEnum.getSex(id);
}
@Override
public Object getResult(ResultSet resultSet, int i) throws SQLException {
int id = resultSet.getInt(i);
return SexEnum.getSex(id);
}
@Override
public Object getResult(CallableStatement callableStatement, int i) throws SQLException {
int id = callableStatement.getInt(i);
return SexEnum.getSex(id);
}
}
ps:我的博客有源码可以下载(3种typeHandler的使用案例)