通过t_student表ID查询与其相关的信息,如某个学生的姓名和其所在班级
点击查看链接,如下
这里我们的班级名称是在t_class表中的,学生姓名是在t_student中的,并不是在同一张表上,这样当t_class中的班级名称改变之后,t_class中查到的班级信息也会随之改动,这样才达到表关联目的。
通过id查询学生相关信息
<td><a th:href="@{'/stuInfo/'+${stu.stu_id}}">查看</a></td>
控制层
/***
* 关联信息查询
* @param model
* @param id
* @return
*/
@GetMapping(value = "stuInfo/{id}")
public String stuInfo(Model model,@PathVariable("id") Integer id){
System.out.println("关联ID==="+id);
//返回关联信息 studentDTO.getStudents()可以得到 StudentDTO(数据传输对象)与Grade(班级实体)对象信息
StudentDTO studentDTO = studentService.selectStudentById(id);
System.out.println("关联信息==="+studentDTO);
System.out.println("与之关联的班级信息==="+studentDTO.getStudents());
model.addAttribute("studentInfo",studentDTO.getStudents());
return "/stuInfo";
}
创建数据传输对象实体类
package com.ydf.demo.dto;
import com.ydf.demo.pojo.Grade;
import lombok.Data;
import java.util.List;
//学生表的数据传输对象实体类
@Data
public class StudentDTO {
private int stu_id; //学生主键
private String stu_name; //学生姓名
private int stu_classid; //班级表外键
private Grade grade; //关联班级实体对象
private List<StudentDTO> students; //一个集合
}
业务层
StudentDTO selectStudentById(int id);
业务层接口实现类
@Override
public StudentDTO selectStudentById(int id) {
List<Student> students = studentDao.selectStudentById(id);
System.out.println("<1>根据主键ID查询学生个人信息==="+students);
List<StudentDTO> studentDTOSList = new ArrayList<>();
if (null != students){
for (Student student : students ){
Grade grade = studentDao.selectGradeById(student.getStu_classid());
System.out.println("<2>根据外键查询所处班级信息==="+grade);
StudentDTO studentDTO = new StudentDTO();
//把student中的值赋给studentDTO(数据传输对象)
BeanUtils.copyProperties(student,studentDTO);
//把grade对象信息放入studentDTO(数据传输对象)中
studentDTO.setGrade(grade);
//放入studentDTOSList集合
studentDTOSList.add(studentDTO);
}
}
//再将集合中的值存入studentDTO1(数据传输对象)
StudentDTO studentDTO1 = new StudentDTO();
studentDTO1.setStudents(studentDTOSList);
return studentDTO1;
}
数据接口层
List<Student> selectStudentById(@Param("stu_id") int id);
Grade selectGradeById(@Param("class_id") int stu_classid);
mapper.xml
<select id="selectStudentById" resultType="com.ydf.demo.pojo.Student">
select * from t_student where stu_id=#{stu_id};
</select>
<select id="selectGradeById" resultType="com.ydf.demo.pojo.Grade">
select * from t_class where class_id=#{class_id};
</select>
html视图
<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>信息</title>
<link type="text/css" rel="stylesheet" th:href="@{/bootstrap-4.3.1-dist/css/bootstrap.css}" >
</head>
<body>
<div class="media" th:each="stu:${studentInfo}" style="padding: 200px;">
<div class="media-body">
<h5 class="mt-0" th:text="'姓名:'+${stu.stu_name}"></h5>
<h5 th:text="'所在班级:'+${stu.grade.class_name}"></h5>
</div>
</div>
</body>
</html>