场景
在《Mybatis - collection分步查询》与《Mybatis - association分步查询》中,在对子查询进行传参时仅是单个参数传递。在实际开发中,在子查询执行条件里可能存在多参传递,此时将多参封装成Map即可完成多参传递。因为多参是封装成Map的形式进行多参传递,所以参数的取值必须严格遵守Map的形式。实例
查询班级名称为XX负责人为YY下的所有学和信息Code
Student.java
public class Student {
private String id;
private String name;
private int age;
private String sex;
private String className;
private String chargeMan;
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
}
StudentMapper.java
public interface StudentMapper {
Student getStudentInfoByClassNameAndChargeMan (String className, String chargeMan);
}
StudentMapper.xml
<select id="getStudentInfoByClassNameAndChargeMan" type="com.cat.pojo.Student">
SELECT name, age, sex FROM student WHERE class_name = #{className} AND charge_man = #{chargeMan}
</select>
ClassInfo.java
public class ClassInfo {
private int classCode;
private String className;
private String chargeName;
private List<Student> students;
public void setClassCode (int classCode) {
this.classCode = classCode;
}
public String getClassCode () {
return this.classCode;
}
}
ClassInfoMapper.java
public interface ClassInfoMapper {
ClassInfo getStudentsByClassCode (String classCode) ;
}
ClassInfoMapper.xml
<select id="getStudentsByClassCode" resultMap="classAndStudentMap">
SELECT class_code, class_name, charge_man
FROM class
WHERE class_code = #{class_code}
</select>
<resultMap id="classAndStudentMap" type="com.cat.pojo.ClassInfo">
<result column="class_code" property="classCode" />
<result column="class_name" property="className" />
<result column="charge_man" property="chargeMan" />
<collection property="students" select="com.cat.mapper.StudentMapper.getStudentInfoByClassNameAndChargeMan " column="{className : class_name, chargeMan : charge_man}"/>
</resultMap>