在使用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 | <select id="selectByIds" resultMap="BaseResultMap"> |