mybatis注解@Param
基于mybatis注解写sql,出现了一个对象映射问题,一开始我没用@Param,因为当时只有一个入参所以没写springboot是能识别到的,但是我后来因为需求原因重写了方法加多了一个入参,就无法识别了
//实体类Student
@data
public class Student{
private int id;
private String name;
private String age;
}
//例如写一个mapper方法
@Select("select s.id,s.name,s.age from student s where s.id = #{testId}")
Student selectStudentByTestId(Student student,int testId);
这样会报错,无法识别到testId,需要加上@Param注解
@Select("select s.id,s.name,s.age from student s where s.id = #{testId}")
Student selectStudentByTestId(@Param("student") Student student,@Param("testId") int testId);
这个时候是可以用的,但是如果你用了student里面的字段你就得带上名字,即
#{student.id}
分页Count
联表查询并且用到了聚合函数和group by的时候,需求需要,例如需要统计A表和B表关联字段最大值(A和B是一对多关系),直接count会出问题,他会返回好几条count给你,这样会报错,因为我们分页就是只要一个参数返回。
@Select("select count(1) from student s inner join dept d on d.id = s.dept_id where s.id = #{testId} group by s.id")
Student selectStudentByTestId(@Param("student") Student student,@Param("testId") int testId);
结果会返回多个count,这种情况咱们可以用子查询来避免
//Student类多一个deptName字段
@Select("select count(1) from (select s.id,s.name,s.age,max(d.deptName) from student s inner join dept d on d.id = s.dept_id where s.id = #{testId} group by s.id)")
Student selectStudentByTestId(@Param("student") Student student,@Param("testId") int testId);