刚入职公司,参与到一个项目中,由于是刚毕业的菜鸟,只能分配写一些查询的接口代码。其中有一个就是需要返回一个实体类的信息,该实体类带有List属性,返回的结果类似于下图。
我的解决办法是将查询分成两步,第一步是查询到对应的表的实体类结果,第二部查询到一个List集合然后将这个集合通过set方法复制给实体类。后来看了同事的代码豁然开朗,这里用学生的信息模拟一下。
建了五张表,分别是school(学院)class(班级)student(班级)course(课程)stu_course(学生选课表),表结构如下
学院表
班级表
学生表
课程表
学生选课表
班级表通过school_id与学院表关联,学生表通过class_id与班级表关联,学生选课表关联学生表和课程表。
在STS中新建springboot项目,application.properties配置如下
pom.xml文件如下
项目建好后使用mybatis plus自动生成实体类service和controller以及Mapper,生成好的如下图。
并创建要返回的学生详细信息的实体类StudentDto,该实体类包含List类型的学生选课的课程信息
package com.example.chapter3.dto;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.activerecord.Model;
import com.example.chapter3.model.Course;
public class StudentDto extends Model
private static final long serialVersionUID = 1L;
/**
* 学生ID
*/
private String studentId;
/**
* 学生姓名
*/
private String studentName;
/**
* 学生年龄
*/
private Integer studentAge;
/**
* 学生性别
*/
private String studentSex;
/**
* 学校ID
*/
private String schoolId;
/**
* 班级ID
*/
private String classId;
private String shcoolName;
private String className;
private List
@Override
protected Serializable pkVal() {
// TODO Auto-generated method stub
return studentId;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getStudentAge() {
return studentAge;
}
public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
public String getStudentSex() {
return studentSex;
}
public void setStudentSex(String studentSex) {
this.studentSex = studentSex;
}
public String getSchoolId() {
return schoolId;
}
public void setSchoolId(String schoolId) {
this.schoolId = schoolId;
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getShcoolName() {
return shcoolName;
}
public void setShcoolName(String shcoolName) {
this.shcoolName = shcoolName;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public List
return courses;
}
public void setCourses(List
this.courses = courses;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "StudentDto [studentId=" + studentId + ", studentName=" + studentName + ", studentAge=" + studentAge
+ ", studentSex=" + studentSex + ", schoolId=" + schoolId + ", classId=" + classId + ", shcoolName="
+ shcoolName + ", className=" + className + ", courses=" + courses + "]";
}
}
student_id, student_name, student_age, student_sex, school_id, class_id
其对应的StudentMapper.class文件如下
该Mapper有一个查询学生信息的方法对应studentMapper.xml里的selectStudentDetails。通过联合查询返回stuDtoResultMap,这是个resulMap类型,type="com.example.chapter3.dto.StudentDto"是学生的详细信息实体类,其中的
表示的是StudentDto的List集合,返回的是List
其对应的Mapper文件如下
访问请求localhost:8081/student/studentDetails/st001得到结果如下