Mybatis,如何自定义TypeHandler获取数组类型?我自己自定义了一个TypeHandler,但测试没触发调用,是什么问题,如何解决?
需要接受Postgresql的数组字段,先用编写一个返回值为map<String,Object>的mapper,查询返回带有数组字段的结果集,其中有字段是varchar[][],而map返回值的是[[Ljava.lang.String;,是二维数组的字节码表示。然后创建了一个实体,编写一个二维数组字段,新建一个查询用的mapper,返回值被设定为测试的实体类类型
其中typeHandler如下:
public class StringTwoArrayTypeHandler implements TypeHandler<String[][]> {
@Override
public void setParameter(PreparedStatement ps, int i, String[][] parameter, JdbcType jdbcType) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public String[][] getResult(ResultSet rs, String columnName) throws SQLException {
// TODO Auto-generated method stub
System.out.println(columnName+":"+rs.getObject(columnName));
return null;
}
@Override
public String[][] getResult(ResultSet rs, int columnIndex) throws SQLException {
// TODO Auto-generated method stub
System.out.println("String Array :"+columnIndex);
return null;
}
@Override
public String[][] getResult(CallableStatement cs, int columnIndex) throws SQLException {
// TODO Auto-generated method stub
System.out.println("String Array :"+columnIndex);
return null;
}
}
</settings>
<typeHandlers>
<typeHandler javaType="org.postgresql.geometric.PGpolygon" handler="com.xxx.common.persistence.typehandler.PGpolygonHandler" />
<typeHandler javaType="java.lang.reflect.Array" handler="com.xxx.common.persistence.typehandler.StringTwoArrayTypeHandler" />
</typeHandlers>
上面的是mybatis的配置文件其中关于类型转换处理的部分,我编写了两个字段,一个是关于postgresql的多边形类型字段转java的postgresql的jar包里的PGpolygon类型,这个转换,经测试是是成功的,
另外一个是String[][]二维数组的转换。可以看到StringTwoArrayTypeHandler类重写的方法的结果集返回字段内容的方法返回值是null值,这因为是测试看看typeHandler到底有没有方法被调用,所以省略不写,
java测试实体的字段,这里描述只写类型,就不写getset了
private String[][] fence_list;
private PGpolygon fence;
测试发现,PGpolygonHandler里的方法调用了,实体类的fence属性,也成功得到了值,而问题出现了,StringTwoArrayTypeHandler 里面的方法并没有被调用。我不知道是什么原因,有人知道怎么回事,怎么解决让能处理二维数组字段转换?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
@MappedJdbcTypes({JdbcType.VARCHAR}) //对应数据库类型,可能不是varchar @MappedTypes({ String[][].class}) public class StringTwoArrayTypeHandler implements TypeHandler {