我是靠谱客的博主 威武路灯,最近开发中收集的这篇文章主要介绍Mybatis 传递参数类型为List集合或Map的取值问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

传递List:

当传递一个 List 实例或者数组作为参数对象传给 Mybatis。此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。 

DAO 层:

Long selectCustomerCountList( List customerIdList);

XML文件:

<select id="selectCustomerCountList" parameterType="java.util.List" 
                   resultType="java.lang.Long">
       select count(1) from np_customer_info where id in
           <foreach item="item" collection="customerIdList" separator="," open="("                                     close=")" index=""> 
                 #{item, jdbcType=INTEGER}    
           </foreach> 
</select>

注意:DAO 层接口的参数名与XML 文件中的collection的属性值一致,会导致

org.apache.ibatis.binding.BindingException: Parameter ‘customerIdList’ not found. Available parameters are [collection, list]

 

解决方法 
第一种:利用Mybatis给我们的封装进行XML配置,将我们的XML中collection属性值设置为list。

 

DAO 层:

Long selectCustomerCountList( List customerIdList);

XML文件:

<select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long">
        select count(1) from np_customer_info where id in
        <foreach item="item" collection="list" separator="," open="(" close=")" index="">  #{item, jdbcType=INTEGER}    
        </foreach> 
    </select>

                                                        注意:此时collection强制指定为list且不可改变

第二种: 利用注解@Param指定我们的入参名称  (推荐)

DAO层:

Long selectCustomerCountList(@Param("customerIdList") List customerIdList);

XML文件:
 

<select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long">
        select count(1) from np_customer_info where id in
        <foreach item="item" collection="customerIdList" separator="," open="(" close=")" index="">  #{item, jdbcType=INTEGER}    
        </foreach> 
    </select>


注意: 此时的DAO层参数名可以 @Param("customerIdList") 与 collection的属性值一致

 

 

第三种:将我们的List包装成Map参数进行传递


 

    在Service业务处理层次上面将参数进行包装
    public Long selectCustomerCountMap(List customerIdList) {   
        Map maps = new HashMap();
        maps.put("customerIds", customerIdList);
        return customerMapper.selectCustomerCountMap(maps);
    }

    DAO层:
    Long selectCustomerCountMap(Map maps);


XML文件:

<select id="selectCustomerCountMap" parameterType="java.util.Map" resultType="java.lang.Long">
        select count(1) from np_customer_info where id in
        <foreach item="item" collection="customerIds" separator="," open="(" close=")" index="">  #{item, jdbcType=INTEGER}    
        </foreach> 
    </select>

注意: 入参类型是java.util.Map而不再是List ,此时的collection属性值为Map中的Key值。

 

 


传递Map:

如果传递的参数是map,那么在xml文件中 直接取 map中相应的kay即可。

Service:

Map<> map = new HashMap<>();
map.put("name","zhang");
map.put("age",18);
XXDAO.selectByMap(map);

Dao层:

void  selectByMap(Map map);

XML:

<select id="selectByMap" parameterType="java.util.Map" resultType="java.lang.Long">
        select count(1) from np_customer_info where id in (
            select id from xx a where a.name = #{name} and a.age = #{age}
        )
        
    </select>

 

最后

以上就是威武路灯为你收集整理的Mybatis 传递参数类型为List集合或Map的取值问题的全部内容,希望文章能够帮你解决Mybatis 传递参数类型为List集合或Map的取值问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部