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

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

目录

多表连查

多表删除

多表修改


多表连查

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

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

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

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

下面是代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qcby.mis.demo.mapper.ClassesMapper">
    <resultMap id="baseMap" type="com.qcby.mis.demo.entity.DicClasses">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="major_id" jdbcType="INTEGER" property="majorId"/>
        <result column="major_name" jdbcType="VARCHAR" property="majorName"/>
        <result column="create_time" jdbcType="DATE" property="createTime"/>
        <result column="update_time" jdbcType="DATE" property="updateTime"/>
        <collection property="teacherList" select="selectTeachersByClassId" column="id" javaType="ArrayList">
        </collection>
    </resultMap>
    <select id="findById" resultMap="baseMap">
        select c.*,m.name as major_name from dic_classes c ,dic_major m where m.id = c.major_id and c.id = #{id};
    </select>
    <select id="selectTeachersByClassId" resultType="com.qcby.mis.demo.entity.User">
        select id,name from user where id in (select user_id from ref_user_classes where class_id = #{id});
    </select>
</mapper>

 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,我不太会用那个,可能是因为这种情况不适合用那个方法,也会继续思考的,有什么新想法可以互相分享

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐