springboot mybatis (关联关系:一对一,一对多,多对多)

例如这个学生选课的这个:这个里面课程跟老师是1对1的,而老师对课程是1对多的,一个课程只能由一个老师教,而一个老师可以教多个课程

对于学生和课程之间是多对多的,一个学生可以对应多个课程,一个课程可以有多个学生选择

 

首选看看数据库

1.用户表:标注了身份,是老师还是学生

2.课程表:老师id

 

 3.课程和学生表,由于是多对多,要开一个表

 

 

由于老师和课程是一对多,所以只需要在课程表里面加一个字段teacher_id

由于课程和学生是多对多,就应该在开一个表,里面有学生id和课程id

 

1.新增课程页面

 

 首先看这里是怎么实现的,首先有一个按照身份从后台查询数据的接口:在页面加载的时候就复制给data中里面的teachers: [],

 

 

 

 然后在前端就可以做一个下拉选项框了

 

 但是这里为什么显示的是老师的昵称呢?数据库中是没有这个字段的,数据库中之后teacher_id

 这个地方就是在一开始分页的时候查的,left join,

首先在这个要返回的Course实体类中加入teacher字段

 

 然后这是contraller层

 

这是Service层

 

 

 这是serviceImpl层

 

 然后是mapper层

 

 之后在这mapper.xml中写入sql语句,也可以在上面那个mapper.java上面对应的写,这里还有一个模糊查询

 

 然后这里就多出来一个teacher这里返回的字段,或者说用这个新手的

 

 

2.学生登录选课界面

这是学生登录后的页面

 

 

 这个编辑新增都只有管理员可以弄

 

 然后我们选了前两个课程

这个选课的逻辑是这样的,这个是点击事件

 

 这里是接口,向后天发送课程id和用户id

 

 这是后台接口

 

 然后又是这标准的一套

 

选的时候是先删除在选择

 

 

 

 

 

 

 3.主页查看

 

这是老师教授的课程

 

 

 这是查看已选的课程

 

 这个怎么实现的呢?

这是前台

 

解释一个地方就是这里, lookCourse(scope.row.courses)这个地方是循环这个刚开始传过来的数据里面的courses数组,这是一开始分页的时候传过来的

 

 

 点击之后

我们以老师查看教授课程为例,这是点击之后出来的框this,vis=true之后就出来了

 

首先这个后台比较难,这是实体类

 

 依旧是这个流程

 

 

 

 

 

 

 

 这里是比较难的:这里的sql语句,

 

 其中这个

<!--
property 需要映射到JavaBean 的属性名称。
column 数据表的列名或者标签别名。
-->

select元素和resultMap元素使用resultMap中的id属性与select元素中的resultMap属性进行关联。select中若使用resultMap则resultType属性则会失效。
resultMap元素中,type属性指明返回集的类型。
<id>和<result>元素都是表明表中的列名和类对象之间的映射关系,id元素用于表中主键(文档中说如此设置有利于提高查询性能,但没有说明原因,为提高性能需要进一步探索),result元素用于普通列名和属性名的对应,property指明类中属性,column指明对应的查询表列名,如果查询中对查询列名设置了as 别名,则column应是对应的别名。

 

 

如果想学习这个知识的话可以看看这个博客

 

 

 

 

 

 

posted @ 2023-02-19 17:40  哎呦哎(iui)  阅读(882)  评论(0编辑  收藏  举报