1.@Param是什么?
是MyBatis所提供的作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应。 简单点说,就是对参数进行命名,你可以取别名,也可以使用当前参数进行命名,然后Mybatis通过参数的名称,在拼接SQL语句的时候进行对号入座。
2.为什么要使用@Param
因为Java没有保存形参的记录
例如 int queryFanCountInfo(String startTime, String endTime, String path);
就相当于 queryFanCountInfo(arg0,arg1,arg2) 参数只能根据索引0,1来进行区分。那我们在xml里进行sql的拼接的时候就只能使用#{0},#{1}的方式这样就会导致参数的混乱。所以Mybatis 就提供了一个注解@Param对参数进行命名,便于区分。
3.如果没有使用@Param 会发生什么
/**
* 查询粉丝数 本月、昨日、今日
*
* @param startTime 开始时间
* @param endTime 结束时间
* @param path 路径
* @return int
* @author yulele
* @date 2023/3/30 15:01
*/
int queryFanCountInfo(String startTime, String endTime, String path);
//报错日志
nested exception is org.apache.ibatis.binding.BindingException:
Parameter 'endTime' not found. Available parameters are
[path, enTime, startTime, param3, param1, param2]
没有添加@Param参数的话,Mybatis在进行sql操作的时候找不到对应的参数,导致报错。
总结
所以当我们所以需要传输的参数大于一个时候,就需要加上@Param注解。
Page<FansTeamDto> queryTeamInfoWarehouse(@Param("queryParams") FansRequestParams queryParams, Page<UserExtension> userExtensionPage);