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

发布于 2022-01-05 01:52:49 字数 2172 浏览 881 评论 1

 

需要接受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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无边思念无边月 2022-01-07 07:14:11

@MappedJdbcTypes({JdbcType.VARCHAR}) //对应数据库类型,可能不是varchar @MappedTypes({ String[][].class}) public class StringTwoArrayTypeHandler implements TypeHandler {

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文