mybatis的mapper,参数为map的话,为啥报这个错?

java.lang.IllegalArgumentException: Name for argument type [int] not available, and parameter name information not found in class file either.
 <select id="get_cases" resultType="News" parameterType="java.util.Map">
        SELECT * FROM `case` WHERE state=0 and `type`= #{type,jdbcType=INTEGER}
        order by create_time desc limit ${num,jdbcType=INTEGER}
        
    </select>

图片描述

阅读 5.7k
2 个回答

既然是map,那么入参应该是一个对象,type是map中的一个属性的话,这个位置应该是

 <select id="get_cases" resultType="News" parameterType="java.util.Map">
        SELECT * FROM `case` WHERE state=0 and `type`= #{map.type,jdbcType=INTEGER}
        order by create_time desc limit ${map.num,jdbcType=INTEGER}
 </select>

另外,建议使用@Param注解将参数命名。

XML那里写错了,更正成parameterType="map",并不是java.util.Map

扩展阅读:

在mapper中如何传递多个参数?

第一种:使用占位符的思想

  • 在映射文件中使用#{0},#{1}代表传递进来的第几个参数
  • 使用@param注解:来命名参数

#{0},#{1}方式


//对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

<select id="selectUser"resultMap="BaseResultMap">  
    select *  fromuser_user_t   whereuser_name = #{0} anduser_area=#{1}  
</select>  

@param注解方式


        public interface usermapper { 
         user selectuser(@param(“username”) string username, 
         @param(“hashedpassword”) string hashedpassword); 
        }
 <select id=”selectuser” resulttype=”user”> 
         select id, username, hashedpassword 
         from some_table 
         where username = #{username} 
         and hashedpassword = #{hashedpassword} 
    </select>

第二种:使用Map集合作为参数来装载


     try{
            //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL


            /**
             * 由于我们的参数超过了两个,而方法中只有一个Object参数收集
             * 因此我们使用Map集合来装载我们的参数
             */
            Map<String, Object> map = new HashMap();
            map.put("start", start);
            map.put("end", end);
            return sqlSession.selectList("StudentID.pagination", map);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }

    <!--分页查询-->
    <select id="pagination" parameterType="map" resultMap="studentMap">

        /*根据key自动找到对应Map集合的value*/
        select * from students limit #{start},#{end};

    </select>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题