排查问题:
首先更具mybatis的SQL语句查看并且给传来的数据进行复制,使用数据库查询
可以根据数据库查到数据,说明SQL语句没问题,然后打断点查看传递过来的数据XXX数据是否为null
可替换的字段全正常不为null,继续排查发现传递的过程中没有使用@Param注解,添加即可
@Param
注解用于将方法参数与 SQL 查询中的参数名称进行关联。在 MyBatis 中,当方法有多个参数时,需要通过 @Param
注解来指定每个参数的名称,以确保 MyBatis 能够正确地识别它们并将其传递给 SQL 查询。
例如,在上面提供的方法签名中,我们使用了 @Param
注解来指定了每个参数的名称,如下所示:
List<SubjectInfo> queryPage(@Param("subjectInfo") SubjectInfo subjectInfo, @Param("categoryId") Long categoryId, @Param("labelId") Long labelId, @Param("start") Integer start, @Param("pageSize") Integer pageSize);
在这个例子中,@Param("subjectInfo")
表示第一个参数 subjectInfo
将与 SQL 查询中的 #{subjectInfo}
占位符相关联。同样地,@Param("categoryId")
将第二个参数 categoryId
与 SQL 查询中的 #{categoryId}
占位符相关联,依此类推
通过使用 @Param
注解,您可以确保 MyBatis 能够正确地识别和处理方法的参数,并将其传递给 SQL 查询,从而避免出现参数无法匹配的错误
在某些情况下,MyBatis 可以通过推断参数名来正确地进行参数绑定,因此在这些情况下不写 @Param 注解也不会出现问题。这通常发生在以下情况下:
-
方法只有一个参数: 当方法只有一个参数时,MyBatis 可以通过推断参数名与 SQL 查询中的参数名进行匹配,因此不需要额外的 @Param 注解。
-
方法参数类型为基本类型或简单类型(如 String、Integer 等): 对于基本类型或简单类型的参数,MyBatis 可以直接识别参数名,并将其与 SQL 查询中的参数名进行匹配,因此不需要 @Param 注解。
-
方法参数与 SQL 查询中的参数名完全一致: 如果方法参数的名称与 SQL 查询中的参数名完全一致,MyBatis 也可以通过推断来正确地进行参数绑定,无需额外的 @Param 注解。
有一些时候可以省略@Param注解,但是以防万一最好补充上