一个List 类型的列表。MemberCheck中有个变量type是重复的,但是不知道重复的次数等。就把重复的这个变量type(Byte)类型在list中提取出来,放入map中当做key,type一样的放入列表中。这样,可以优化速度。
Map<Byte, List<MemberCheck>> map = exportList.stream().collect(Collectors.groupingBy(MemberCheck::getType));
得到的结果是
{1=[MemberCheck(id=12090, applyId=2013, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:51 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:51 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12089, applyId=2007, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:47 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:47 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12087, applyId=2011, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:37 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:37 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12086, applyId=2010, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:33 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:33 CST 2020, delFlag=0, receipt=null)],
2=[MemberCheck(id=12124, applyId=1010, memberCode=3344, memberName=s, createTime=Wed Oct 14 15:08:50 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Wed Oct 14 15:08:50 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12123, applyId=1011, memberCode=3344, memberName=s, createTime=Wed Oct 14 15:08:46 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Wed Oct 14 15:08:46 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12094, applyId=1005, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:10 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:06:10 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12092, applyId=1007, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:01 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:06:01 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12085, applyId=1006, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:28 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:05:28 CST 2020, delFlag=0, receipt=null)],
3=[MemberCheck(id=12093, applyId=4, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:05 CST 2020, status=5, type=3, checkAuthor=test4, checkTime=Tue Oct 13 16:06:05 CST 2020, delFlag=0, receipt=null)]}
##################################################
根据type的不同,去不同的数据表进行查询。
这样做因为一对多的关系,一张审核表对于多个申请表,你拿到多条审核数据,需要根据数据去不同的申请表中取对应的其他数据。这样可以避免每一条审核数据都要和申请数据进行一次交互。如果有十条审核数据,需要一共查询十次。这样处理之后,只需要查三次就可以了。然后把type对应的value列表,直接传入mybatis,在mybatis中进行遍历取值即可。
比如,我想要拿到三张申请表中主键ID和审核表applyId对应的所有数据。需要进行上述处理之后,把type对应的value,传入对应的表中。
map.get(1)
这样就取出map中key为1的列表。传入mybatis中之后
SELECT
...
FROM
A a //审核表 一对多中的一
LEFT JOIN B b //申请表 一对多中的多
on a.apply_id = b.id
WHERE
b.id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.applyId}
</foreach>
在持久层参数前添加parme
List<ResultExport> getResultExport(@Param("list") List list);
这样就可以把列表中实体内的所有applyId提取出来,放入()中,以逗号隔开。
遇到的第二个问题,前端传入一个list,后台需要进行处理,根据list中实体的其中一个字段进行排序。(String可以直接排序,先空字符,然后数字,然后字母)。
//根据实体中的memberCode值进行顺序排列,生成个新的list
list = list.stream().sorted(Comparator.comparing(ResultExport::getMemberCode)).collect(Collectors.toList());