springboot整合mybatis实现多表查询(一对多)

首先新建两个类,分别为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>

六、显示结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值