首先新建两个类,分别为Major(专业类)和Sclass(班级类),一个专业可以有多个班级,所以Major与Sclass的关系应为一对多,反过来一个班级只能对应一个专业,所以Sclass与Major的关系为一对一。
一、实体类信息如下
public class Major {
private int id;
private String majorName;
private List<Sclass> sclassList;
public Major() {
}
public Major(String majorName) {
this.majorName = majorName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMajorName() {
return majorName;
}
public void setMajorName(String majorName) {
this.majorName = majorName;
}
public List<Sclass> getSclassList() {
return sclassList;
}
public void setSclassList(List<Sclass> sclassList) {
this.sclassList = sclassList;
}
}
public class Sclass {
private int id;
private int majorId;
private String sclassName;
private Major major;
public Sclass() {
}
public Sclass(int majorId, String sclassName) {
this.majorId = majorId;
this.sclassName = sclassName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getMajorId() {
return majorId;
}
public void setMajorId(int majorId) {
this.majorId = majorId;
}
public String getSclassName() {
return sclassName;
}
public void setSclassName(String sclassName) {
this.sclassName = sclassName;
}
public Major getMajor() {
return major;
}
public void setMajor(Major major) {
this.major = major;
}
}
二、一对多映射
@Mapper
public interface MSmapper {
@Select("select * from major_tab where id = #{id}")
@Results({
@Result(id = true, property = "id", column = "id"),
@Result(property = "sclassList", column = "id",
many = @Many(select = "com.csdn.mapper.MSmapper.selectSclassByMajorId"))
})
Major selectMajorById(@Param("id") Integer id);
@Select("select * from sclass_tab where majorId = #{majorId}")
List<Sclass> selectSclassByMajorId(@Param("majorId") Integer majorId);
}
property = "sclassList"表示将查询的结果赋值给Major的sclassList属性
column = "id"表示将major_tab中的id作为com.csdn.mapper.MSmapper.selectSclassByMajorId的查询参数
many表示一对多查询
@Many(select =“方法路径”)表示我们要调用的方法
三、一对多service层的代码
public interface MSService {
Major findMajorById(Integer id);
}
@Service
public class MSServiceImpl implements MSService {
@Autowired(required = false)
private MSmapper mapper;
@Override
public Major findMajorById(Integer id) {
return mapper.selectMajorById(id);
}
}
四、一对多controller层代码
@Controller
public class MSController {
@Autowired
private MSService service;
@RequestMapping("/selectMajors")
public String selectMajors(Model model){
Major major = service.findMajorById(1);
model.addAttribute("major", major);
return "major";
}
}
五、一对多前端html代码
<div class="container" style="margin-top: 60px">
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<td>专业</td>
<th>班级</th>
</tr>
</thead>
<tbody>
<tr th:each="sclass:${major.sclassList}">
<td th:text="${major.majorName}"></td>
<td th:text="${sclass.sclassName}"></td>
</tr>
</tbody>
</table>
</div>
六、显示结果