在使用Mybatis执行sql语句时抛了这个异常:java.lang.UnsupportedOperationException。
从字面上理解错误的含义就是不支持的操作异常,后面定位到错误发生在数据库sql语句中,具体原因就是resultType="java.util.List"
有问题。返回的结果是一个List类型的集合,于是resultType使用了List,但是出现了这个异常。结果发现需要使用Long类型。
原mapper.xml文件中的SQL语句如下:
<select id="findIds" resultType="java.util.List" parameterType="java.lang.Long" >
select u.id_ from sys_user u
where u.system_ = #{system}
</select>
service接口和实现类都没有问题:
public List<Long> findIds(Long system);
查询发现还是Mybatis的select语句中resultType的问题: 原因就在于resultType代表的是List中的元素类型,而不应该是List本身.
resultType属性值更改后如下:
<select id="findIds" resultType="java.lang.Long" parameterType="java.lang.Long" >
select u.id_ from sys_user u
where u.system_ = #{system}
</select>
改完后异常就解决了。
========================================================================================
参考下网上总结的resultType:
resultType:
1、基本类型 :resultType=基本类型
2、List类型: resultType=List中元素的类型
3、Map类型 单条记录:resultType =map
Map类型 多条记录:resultType =Map中value的类型
分析:
1、如果返回值为基本类型,则resultType=基本类型,比如resultType=java.lang.Integer,那sql语句中只返回一个int类型数据,通常用于统计数量
2、如果返回值为list类型,则resultType=List中元素的类型,比如你需要返回一个List类型的数据,那么这里resultType=”java.lang.String”,如果需要返回一个实体类,那么resultType="com.example.User"以此类推。
3、如果返回值为map单条类型,比如{userName="xxx"},那么resultType ="map"。
4、如果返回值为map多条记录,比如{res="实体类"},实体类就是你要请求的数据实体类,那么resultType =Map中value的类型,比如resultType="com.example.User"。
==================================================================
还有其他报此异常的,可以参考下: https://blog.csdn.net/huangdi1309/article/details/79444832