avatar

目录
mybaties做批量数据操作,报org.apache.ibatis.binding.BindingException异常

    在使用mybaties持久层框架在做”批量数据”操作时,系统报”org.apache.ibatis.binding.BindingException”异常,这种情况出现的原因一般有以下几种情况:

  • xml文件中的”foreach”语句最重要的元素,也最容易出现问题的为”collection”,该元素必须指定,但根据不同的情况氛围分为三种情况:

    • 1、DAO层传参为单参数且参数为List的时,collection属性为”list”;
    • 2、DAO传单参数且参数类型为Array时,collection属性为”array”;
    • 3、DAO层传参为多参数时,用Map或实体对象封装;
  • 本质上讲DAO层传单参数时,持久层框架底层也是自动把参数封装成Map。如传参单参数list时,封装成Map后,key值为”list”,value值为传入的List参数,此时”foreach”中的”collection”属性值则必须为key值,也即”list”;

  • 另一种方法是使用@Param注解,实际上底层在把参数封装为Map时,指定@Param中的参数为key值,此时在mapper.xml文件中使用该参数时,参数名须与指定参数名一致。如”foreach”的”collection”属性值必须和注解@Param指定的参数名一致;

    mybaties框架批量数据操作语句如下所示:

    操作数据层,也即DAO层:

Code
1
List<ItemPO> selectByIds(@Param("ids") List<Long> ids);

    对应的xml文件

Code
1
2
3
4
5
6
7
8
9
10
<select id="selectByIds" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from item
where id in
<foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
and is_del = 0
</select>

文章作者: 海东青
文章链接: https://haohaogit.github.io/2019/12/22/mybaties%E5%81%9A%E6%89%B9%E9%87%8F%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C%EF%BC%8C%E6%8A%A5org-apache-ibatis-binding-BindingException%E5%BC%82%E5%B8%B8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo
打赏
  • 微信
    微信
  • 支付宝
    支付宝