我正在尝试IntegerTypeHandler
从我的一个结果地图org.apache.ibatis.type
的包中配置默认值。MyBatis 3.2.1
给定以下构造函数签名:
public Activity(int id, String name, String color, ActivityType type,
int idOfOwnerClient) {
//validations and fields initializations
}
我正在尝试将SQL NULL
value 转换为int
with value 0
,因为该字段int idOfOwnerClient
是可选的,因此数据库可能具有NULL
值。
如果尝试将 a 传递null
给原始类型,例如int
,Exception
则会抛出 an ,为了解决这个问题,我正在配置 a TypeHandler
。
这是我的一个片段mybatis-config.xml
<configuration>
<typeAliases>
<typeAlias alias="intTypeHandler" type="org.apache.ibatis.type.IntegerTypeHandler"/>
</typeAliases>
</configuration>
和我的结果映射的片段(注意最后一个 arg 元素的类型处理程序):
<resultMap type="Activity" id="activityResult">
<constructor>
<idArg column="activity.id" javaType="_int"/>
<arg column="activity.name" javaType="String"/>
<arg column="activity.color" javaType="String"/>
<arg resultMap="ActivityTypeMapper.activityTypeResult" javaType="ActivityType"/>
<arg column="activity.id_client" javaType="_int" typeHandler="intTypeHandler"/>
</constructor>
</resultMap>
但是,当我运行 junit 测试时,出现以下错误(注意错误null
末尾的值):
org.mybatis.spring.MyBatisSystemException: nested exception is
org.apache.ibatis.reflection.ReflectionException: Error instantiating class
br.com.agrofficio.kpifarm.model.Activity with invalid types
(int,String,String,ActivityType,int,) or values
(2,Aplicação de Cal,FFFFFF,[Id: 1, Name: Plantio],null,). Cause: java.lang.IllegalArgumentException
正如上面的堆栈跟踪所建议的那样,即使应用了处理程序,我仍然得到一个null
值而不是。0
我尝试但没有成功的解决方案
1.使用处理程序的完全限定名称而不是 resultmap 上的别名:
<arg column="activity.id_client" javaType="_int" typeHandler="org.apache.ibatis.type.IntegerTypeHandler"/>
2.添加类型处理程序声明mybatis-config.xml
:
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.IntegerTypeHandler"/>
</typeHandlers>
有任何想法吗?提前致谢!