TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性类型和数据库列类型的转换过程进行干涉,在过程中添加某些可能需要的操作。
1、自定义的typeHandler类需要实现typeHandler接口并且实现接口方法;
2、配置文件添加<typeHandler>;
3、在映射文件中的参数和结果添加类型说明,javaType和jdbcType。
简单实例如下:
1.类型控制类
1. package
2.
3. import
4. import
5. import
6. import
7.
8. import
9. import
10.
11.
12. /**
13. * @author chl
14. * 类型转换器
15. * 实现TypeHandler接口
16. * 需要强调的是:为了让类型控制器起作用,必须在mapper.xml中对参数和结果的类型进行显示表明。
17. */
18. public class StringVarcharTypeHandler implements
19.
20. @Override
21. public Object getResult(ResultSet rs, String columnName) throws
22. // TODO Auto-generated method stub
23. "getResult(rs,columnName)");
24. return
25. }
26.
27. @Override
28. public Object getResult(CallableStatement arg0, int
29. throws
30. // TODO Auto-generated method stub
31. return null;
32. }
33.
34. @Override
35. public void setParameter(PreparedStatement ps, int
36. throws
37. // TODO Auto-generated method stub
38. "setParameter()");
39. ps.setString(paraIndex, (String)object);
40. }
41.
42. }
2.配置文件中添加类型控制器配置
1. <!-- 类型处理器 -->
2. <typeHandlers>
3. <typeHandler javaType="String" jdbcType="VARCHAR"
4. handler="com.chl.mybatis.typehandler.StringVarcharTypeHandler"/>
5. </typeHandlers>
3.映射文件中添加类型说明
1. <select id="selectUsers" resultMap="userMap">
2. select username, sex from t_user;
3. </select>
4.
5. <insert id="insertUser" parameterType="User">
6. insert into t_user (username, sex)
7. values
8. javaType=String, jdbcType=VARCHAR},
9. javaType=String, jdbcType=VARCHAR});
10. </insert>
11. <!-- 实现结果中列于对象属性的对应关系,利用javaType和jdbcType表示类型关系,这样有助于TypeHandler的匹配使用 -->
12. <resultMap id="userMap" type="User">
13. <result property="userName" column="username" javaType="String" jdbcType="VARCHAR"></result>
14. <result property="sex" column="sex" javaType="String" jdbcType="VARCHAR"></result>
15. </resultMap>