我正在尝试在spring mybatis中设置ENUM TypeHandlers,低于异常,
原因:org.apache.ibatis.type.TypeException:无法找到可用的 类的构造函数 com.citi.aw.data.ibatis.KnownTypeHandlers $ PortfolioTypeEnum
SqlConfig.xml
<configuration>
<typeHandlers>
<typeHandler javaType="com.citi.aw.entities.portfolio.PortfolioType"
handler="com.citi.aw.data.ibatis.KnownTypeHandlers$PortfolioTypeEnum"/></typeHandlers>
</configuration>
PortfolioType Enum
public enum PortfolioType
{
PROPOSAL,
INVESTABLE,
MODEL,
MODEL_STRATEGY,
STRATEGY,
CLIENT,
FUND_OF_FUND,
REFERENCE,
MODEL_ALLOCATION
}
Class KnownTypeHandlers
public class KnownTypeHandlers
{
public static abstract class PortfolioTypeEnum extends OrdinalEnumTypeHandler
{
public PortfolioTypeEnum()
{
super(PortfolioType.values());
}
}
}
Class OrdinalEnumTypeHandler
public abstract class OrdinalEnumTypeHandler extends org.apache.ibatis.type.BaseTypeHandler<Object>
{
private Object[] enumValues;
protected OrdinalEnumTypeHandler(Object[] enumValues)
{
this.enumValues = enumValues;
}
@Override
public Object getResult(ResultSet rs, String columnName) throws SQLException
{
int intValue = rs.getInt(columnName);
return enumValues[intValue];
}
@Override
public Object getResult(ResultSet rs, int columnPos) throws SQLException
{
int intValue = rs.getInt(columnPos);
return enumValues[intValue];
}
@Override
public Object getResult(CallableStatement arg0, int arg1) throws SQLException
{
throw new SQLException("not implemented");
}
@SuppressWarnings("unchecked")
//@Override
public void setParameter(PreparedStatement ps, int pos, Object parameter, String jdbcType) throws SQLException
{
ps.setInt(pos, ((Enum)parameter).ordinal());
}
//@Override
public Object valueOf(String stringValue)
{
return enumValues[Integer.parseInt(stringValue)];
}
}
答案 0 :(得分:3)
我猜你正在使用MyBatis 3.所以,你不需要为枚举创建任何处理程序。 MyBatis有一个typehandler
到Enum案例。
参考文档中的MyBatis 3 Configuration:
<强>类型处理器强>
每当MyBatis在PreparedStatement上设置参数时 或从ResultSet中检索值,TypeHandler用于 以适合Java类型的方式检索值。该 下表描述了默认的TypeHandlers。
...
EnumTypeHandler - Enumeration Type - VARCHAR任何字符串兼容类型,因为代码存储(而不是索引)。
然后添加到您的配置xml(在您的情况下为SqlConfig.xml
:
<!-- mybatis-config.xml -->
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.EnumTypeHandler"/>
</typeHandlers>