当方法只有一个参数时,不需要加上@Param。如果这个参数是POJO且在SQL语句中需要使用其属性,使用#{属性名}既可以引用。
当有多个参数时,如果不加上@Param,会抛出如下异常:
@Insert("insert into tb_category_brand(category_id,brand_id) values(#{categoryID},#{brandId});")
int saveCategoryIdAndBrandId(Long categoryID,Long brandId);
异常:
org.apache.ibatis.binding.BindingException: Parameter 'categoryID' not found. Available parameters are [arg1, arg0, param1, param2]
异常的原因是在SQL语句中引用函数参数不能使用#{参数名}的形式,mybatis会根据参数位置将参数取名为[arg1, arg0, param1, param2],在SQL中#{arg1}是不会报错的,所以将上述代码改为可以正确运行:
@Insert("insert into tb_category_brand(category_id,brand_id) values(#{arg1},#{arg0});")
int saveCategoryIdAndBrandId(Long categoryID,Long brandId);
但是这样可读性很差,于是我们可以使用@Param注解,其中只有一个value属性。给参数加上@Param注解后,mybatis会自动将参数封装成map类型,@Param注解的值@Param(“value”)作为map的key,对应参数作为value,在SQL中就可以使用注解的值来使用参数:
@Insert("insert into tb_category_brand(category_id,brand_id) values(#{cid},#{bid});")
int saveCategoryIdAndBrandId(@Param("cid") Long categoryID, @Param("bid") Long brandId);