例如这个学生选课的这个:这个里面课程跟老师是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这里返回的字段,或者说用这个新手的
![](/i/l/?n=23&i=blog/1914163/202302/1914163-20230219174318502-457939704.png)
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应是对应的别名。
如果想学习这个知识的话可以看看这个博客
标签:这个,springboot,一对一,老师,resultMap,学生,课程,mybatis,id From: https://www.cnblogs.com/lipu123/p/17131825.html