Mybatis,如何自定义TypeHandler获取数组类型?我自己自定义了一个TypeHandler,但测试没触发调用,是什么问题,如何解决?

齿轮1 发布于 01/15 11:53
阅读 95
收藏 0

 

大通彩票_[官网首页]需要接受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 里面的方法并没有被调用。我不知道是什么原因,有人知道怎么回事,怎么解决让能处理二维数组字段转换?

 

 

 

 

 

加载中
0
温安适
温安适
@MappedJdbcTypes({JdbcType.VARCHAR}) //对应数据库类型,可能不是varchar @MappedTypes({ String[][].class}) public class StringTwoArrayTypeHandler implements TypeHandler {
返回顶部
顶部

页面底部区域 foot.htm