Mybatis中的多表 *** 作(查询修改删除)

Mybatis中的多表 *** 作(查询修改删除),第1张

Mybatis中的多表 *** 作(查询修改删除

写一篇博客致我死去的时间

最近在写一个项目,信息管理方面的,对教师和班级的 *** 作是通过关联表,一开始查询班级和查询班级对应的教师是两个接口,被人指点,发现应该就是一个接口,整体思路出现问题,大改!

目录

多表连查

多表删除

多表修改


多表连查

首先从实体类开始,数据库中没有的字段,但是我又要用到,应该这样做

这就表示数据库中没有这个字段,但是你要用。

在配置文件中用collection来进行分表查询

 findById()这个方法是查询一个班级,而下面selectTeachersByClassId()是查询教师信息,在调用findById这个方法时,selectTeachersByClassId会自动执行,因为findById的resultMap是baseMap,通过id进行关联,达到分表查询的目的,另外,要注意,标签的顺序也是有要求的

下面是代码




    
        
        
        
        
        
        
        
        
    
    
        select id,name from user where id in (select user_id from ref_user_classes where class_id = #{id});
    

 Mapper层

其实 selectTeachersByClassId这个方法写不写到Mapper层都无所谓,有强迫症的就写一下吧

Service层

ServiceImpl层

Controller层 

 查询的难点就在于配置文件中的collection,剩下的都比较中规中矩

看一下postman的测试结果

 

 

多表删除

不仅要删除dic_classes表中的,也要删除关联表中的,不需要自己写什么方法,用mybatis plus 自带的方法加上条件构造器就够了,因为关联表中是没有主键的,所以要用到条件构造器

 

多表修改

多表修改,涉及到关联表的,一般是先删除再增加

关联表的数据库 

tip:先删除再增加就是,比如classId = 12时,teacherList里面原来有id为14,15,16的,现在我要修改成只有14,15的,那么先把关联表中classId = 12 的全都删掉,再把userId(教师id)为14,15的加进去,并且新加进去的14, 15的classId仍为12

那么代码就是这样的

修改时传过来一个实体,可以根据dicClasses的get方法得到我们需要的id,再用set方法给redUserClasses进行赋值

删除还是和上面的一样,增加需要传一个实体类,因为一个班级可以对应多个老师,所以我们for循环一个一个的给userId赋值,且插入到数据库中

postman测试,其中teacherList的传参是要这样传的

 

 

在查资料的时候发现有一个批量插入saveBatch,我不太会用那个,可能是因为这种情况不适合用那个方法,也会继续思考的,有什么新想法可以互相分享

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5708676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存