项目情况
公司项目架构用的是 SpringBoot+MyBatis,于是今天遇到了这样一个问题, 在做多张联查的时候 ,我使用了主表的实体作为返回类型 ,结果在postman的 返回结果中 只显示主表的数据信息 ,其他副表的数据字段 都为Null ,迷茫, 请教同事 ,终于算是搞明白了。
问题原因
在项目中,主要是每一张表去对应每一个实体类。副表的字段不在主表当中,根据mybatis的映射原理,使用了主表的实体作为多表联查的返回体,就只能查到主表的数据信息,而副表的信息就只能为 null,对于单张表的查询来说可以使用相对应的实体作为返回体,而像多表联查则需要组合体来进行数据返回
解决办法
1.单独新建一个class实体,用于存放主表和副表需要返回的字段,作为组合返回体
弊端:
1.不够灵活,如果项目后期新加数据返回,你还要再去修改数据库表对应的实体,然后还得去组合实体加上对应的字段,太过于麻烦。 2.其他接口可能也要使用到这个组合实体进行返回,如果这个接口返回的数据只有要求的几个,而你返回了所有的数据,这对于调用你接口的人来说也是一种负担,所以新建组合实体是解决问题的一种办法,但是却并不是实用
2.使用Map作为多表联查的返回实体,一条记录可以用Map作为组合实体,例如Map<String,object>,而对于多条记录的返回可以在Map的外层嵌套一个List,例如Lsit<<String,object>>,使用map的好处是:前端需要什么数据,在Sql语句中查出相对应的数据进行返回,并不会有多余的数据类型。
小小的实习生,理解能力有限,表达不够清晰,如果大家有更好的想法,也请多多指点
本文参考链接:blog.csdn.net/The_Knife/a…