美文网首页
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