想要效果
创建实体类
sql编写
数据库查询结果
myabtis映射
查询成功,查询结果
发现AXIS结果是一个普通的String类型的数组而不是list<list>
查看问题
1.是否typeHandler没有生效
结果:
返回的确实是数组
2.查看映射集
发现ofType写的string类型应该写list类型
但是不行查询会出异常
有没有巨佬知道咋解决呀 不想用java的for循环写
想要效果
创建实体类
sql编写
数据库查询结果
myabtis映射
查询成功,查询结果
发现AXIS结果是一个普通的String类型的数组而不是list<list>
查看问题
1.是否typeHandler没有生效
结果:
返回的确实是数组
2.查看映射集
发现ofType写的string类型应该写list类型
但是不行查询会出异常
有没有巨佬知道咋解决呀 不想用java的for循环写
以下回答引自ChatGPT
可以使用Mybatis的自定义TypeHandler来实现List<List>类型的查询结果封装。以下是实现步骤:
创建自定义TypeHandler类,实现TypeHandler<List<List>>接口,重写getNullableResult和setNonNullParameter方法,代码如下:
public class ListListTypeHandler implements TypeHandler<List<List<String>>> {
@Override
public List<List<String>> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String s = rs.getString(columnName);
return fromString(s);
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<List<String>> parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, toString(parameter));
}
private String toString(List<List<String>> list) {
// 将List<List<String>>转成String
// 实现略
}
private List<List<String>> fromString(String s) {
// 将String转成List<List<String>>
// 实现略
}
}
在Mybatis的配置文件中注册自定义TypeHandler,如下:
<typeHandlers>
<typeHandler handler="com.example.ListListTypeHandler" javaType="java.util.List<java.util.List<java.lang.String>>"/>
</typeHandlers>
在Mapper.xml中使用自定义TypeHandler,如下:
<select id="queryData" resultType="java.util.List" resultMap="listResultMap">
select data from table
</select>
<resultMap id="listResultMap" type="java.util.List">
<result column="data" jdbcType="VARCHAR" typeHandler="com.example.ListListTypeHandler"/>
</resultMap>
在Java代码中调用Mapper接口的方法,即可获取封装好的List<List>类型结果,如下:
List<List<String>> result = mapper.queryData();