美文网首页
MyBaits的java.lang.UnsupportedOpe

MyBaits的java.lang.UnsupportedOpe

作者: 风静花犹落 | 来源:发表于2022-04-26 13:02 被阅读0次

java.lang.UnsupportedOperationException译为:不支持的操作异常

原因一、

如果返回的是集合,应该设置为集合包含的元素类型,而不是集合本身。

实际案列

UserMapper.java

public List<String> getUserPhoneByName(String userName);

UserMapper.xmlresultType为集合本身

<select id="getUserPhoneByName" parameterType="String" resultType="java.util.List">
      select t.user_phone from sys_user t where t.user_name=#{userName, jdbcType = VARCHAR}
</select>

解决方案

UserMapper.xmlresultType应该改为java.lang.String

<select id="getUserPhoneByName" parameterType="String" resultType="java.lang.String">
      select t.user_phone from sys_user t where t.user_name=#{userName, jdbcType = VARCHAR}
</select>

原因二、

接收的集合本身就没有实现具体的添加操作,如一些内部类:java.util.Arrays.ArrayListjava.util.Collections.EmptyList

实际案列

实体类SysRole.java中集合sysUserBos设置默认值为Collections.emptyList() ,导致集合类型为Collections的内部类EmptyList,它的remove()add()等操作都是继承于抽象类AbstractList,且没有具体的实现,所以添加元素时只能抛出UnsupportedOperationException

//用户实体
public class SysRole {
    private Integer id;
    private String roleName;
    //一个角色关联多个用户
    private List<SysUser> sysUserBos = Collections.emptyList();
    
    //用户实体
    public static class SysUser {
        private Integer id;
        private Integer roleId;
        private String userName;
    }
}

SysRoleMapper.xml

<resultMap id="sysRoleMap" type="com.jayknoxqu.entity.SysRole">
    <id column="id" property="id" />
    <result column="role_name" property="roleName" />
    <collection property="sysUserBos" ofType="com.jayknoxqu.entity.SysRole$SysUser" javaType="java.util.List" > 
        <id column="user_id" property="id" />
        <result column="user_name" property="userName" />
    </collection>
</resultMap>

解决方案

设置集合sysUserBos的默认值为new ArrayList<>(),或者直接去掉默认值

private List<SysUser> sysUserBos = new ArrayList<>();

注意: 在get方法中判断是是否为null,都会导致返回的数据为空数组

    public List<SysUser>  getSysUserBos() {
        return  sysUserBos  != null ? sysUserBos  : new ArrayList<>();
        // return ListUtils.defaultIfNull(sysUserBos , new ArrayList<>());
        // return ObjectUtils.defaultIfNull(sysUserBos, new ArrayList<>());
    }

相关文章

网友评论

      本文标题:MyBaits的java.lang.UnsupportedOpe

      本文链接:https://www.haomeiwen.com/subject/czicyrtx.html