待了解:
Lambda根据某字段将集合分组
stream流
---
mybatisplus
在使用mybatis-plus的过程中发现,这插件并不是官网吹的那样好用
@Override public List<InterestShortInfoVo> getTenRecommendInterest() { return interestService.getTenRecommendInterestList().stream().map(item->InterestShortInfoVo.builder() .interestId(item.getId()) .interestLogo(item.getHeadImg()) .interestName(item.getTitle()).build()).collect(Collectors.toList()); }
这算短的,涉及到复杂sql查询,就整个崩了
@Override public InterestContentItemVo publishInterestContentItem(InterestContentItemVo interestContentItemVo) { //插入动态 InterestContentItemDo interestContentItemDo = InterestContentItemDo.builder() .content(interestContentItemVo.getContent()) .contentType(interestContentItemVo.getContentType()) .status(interestContentItemVo.getStatus()) .interestId(interestContentItemVo.getInterestId()) .xNumber(interestContentItemVo.getMemberBaseInfoVo().getXNumber()).build(); Long contentItemId = interestContentItemService.insertContentItem(interestContentItemDo); interestContentItemVo.setId(contentItemId); //插入标签 if(CollectionUtil.isNotEmpty(interestContentItemVo.getTagVoList())){ List<TagDo> tagDoList = interestContentItemVo.getTagVoList().stream().map(item->TagDo.builder() .tagLabel(item.getTagLabel()) .targetId(contentItemId).build()).collect(Collectors.toList()); tagService.saveBatch(tagDoList); } // 插入资源 if(CollectionUtil.isNotEmpty(interestContentItemVo.getResourceVoList())){ List<ResourceDo> resourceDoList = interestContentItemVo.getResourceVoList().stream().map(item-> ResourceDo.builder() .masterId(contentItemId) .resourceType(item.getResourceType()) .resourceTitle(item.getResourceTitle()) .masterType(MasterType.INTEREST).build()).collect(Collectors.toList()); resourceService.insertBatchResource(resourceDoList); } //获取用户信息 MemberBaseInfoVo memberBaseInfoVo = memberService.getMemberInfo(interestContentItemVo.getMemberBaseInfoVo().getXNumber()); interestContentItemVo.setMemberBaseInfoVo(memberBaseInfoVo); return interestContentItemVo; }
虽然功能是没错的也实现了 sql也可以 但是这简直反人类
而且据技术朋友反应:这里面根本没法用Distinct啊!?
sql本来就是为了方便理解好不容易做到mybatis里
这下 mybatis plus 又给弄到java代码里了 虽然写着挺舒服挺爽快 但是遇到多表关联 group by多的就可能玩不转了
比如这个(表名不要吐槽)库存查询
<select id="listKucunWithRiZhi" resultMap="BaseResultMap"> select DISTINCT rizhi2.mingchengguige as mingchengguige, ifnull(substring_index(group_concat((rizhi1.qichukucun1)order by rizhi2.createtime desc),‘,‘,1), (substring_index(group_concat((rizhi2.jieyushuliang) order by rizhi2.createtime desc),‘,‘,0)) )as qichukucun, substring_index(group_concat(ifnull(rizhi1.shourushuliang1,0)order by rizhi2.createtime desc ),‘,‘,1) as shourushuliang, substring_index(group_concat(ifnull(rizhi1.fachushuliang1,0)order by rizhi2.createtime desc ),‘,‘,1) as fachushuliang, substring_index(group_concat(ifnull(rizhi1.tuihuishuliang1,0)order by rizhi2.createtime desc ),‘,‘,1) as tuihuishuliang, substring_index(group_concat(ifnull(rizhi1.posunshuliang1,0)order by rizhi2.createtime desc ),‘,‘,1) as posunshuliang, substring_index(group_concat(ifnull(rizhi1.weixiushuliang1,0)order by rizhi2.createtime desc ),‘,‘,1) as weixiushuliang, ifnull(substring_index(group_concat((rizhi1.jieyushuliang1)order by rizhi2.createtime desc),‘,‘,1), (substring_index(group_concat((rizhi2.jieyushuliang) order by rizhi2.createtime desc),‘,‘,0)) ) as jieyushuliang, ifnull(substring_index(group_concat(rizhi1.createtime order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.createtime order by rizhi2.createtime desc),‘,‘,1) )as createtime, ifnull(substring_index(group_concat(rizhi1.jiagongyigong order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.jiagongyigong order by rizhi2.jiagongyigong desc),‘,‘,1) )as jiagongyigong, ifnull(substring_index(group_concat(rizhi1.danwei order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.danwei order by rizhi2.danwei desc),‘,‘,1) )as danwei, ifnull(substring_index(group_concat(rizhi1.wuliaobianma order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.wuliaobianma order by rizhi2.wuliaobianma desc),‘,‘,1) )as wuliaobianma, ifnull(substring_index(group_concat(rizhi1.id order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.id order by rizhi2.id desc),‘,‘,1) )as id, ifnull(substring_index(group_concat(rizhi1.xiangmuweihu order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.xiangmuweihu order by rizhi2.xiangmuweihu desc),‘,‘,1) )as xiangmuweihu, <if test="rukukufang != null and rukukufang != ‘‘ "> ifnull(substring_index(group_concat(rizhi1.rukukufang order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.rukukufang order by rizhi2.rukukufang desc),‘,‘,1) )as rukukufang, </if> ifnull(substring_index(group_concat(rizhi1.dalei order by rizhi1.createtime desc),‘,‘,1), substring_index(group_concat(rizhi2.dalei order by rizhi2.dalei desc),‘,‘,1) )as dalei from ( select DISTINCT (kucunrizhi.mingchengguige) as mingchengguige, substring_index(group_concat(kucunrizhi.id order by kucunrizhi.createtime desc),‘,‘,1) as id, substring_index(group_concat(kucunrizhi.xiangmuweihu order by kucunrizhi.createtime desc),‘,‘,1)as xiangmuweihu, substring_index(group_concat(kucunrizhi.rukukufang order by kucunrizhi.createtime desc),‘,‘,1)as rukukufang, substring_index(group_concat(kucunrizhi.dalei order by kucunrizhi.createtime desc),‘,‘,1)as dalei, substring_index(group_concat(kucunrizhi.qichukucun order by kucunrizhi.createtime),‘,‘,1)qichukucun1, sum(kucunrizhi.shourushuliang)as shourushuliang1, sum(kucunrizhi.fachushuliang)as fachushuliang1, sum(kucunrizhi.tuihuishuliang)as tuihuishuliang1, sum(kucunrizhi.posunshuliang)as posunshuliang1, sum(kucunrizhi.weixiushuliang)as weixiushuliang1, (substring_index(group_concat( kucunrizhi.qichukucun order by kucunrizhi.createtime),‘,‘,1) +sum(kucunrizhi.shourushuliang) -sum(kucunrizhi.fachushuliang) +sum(kucunrizhi.tuihuishuliang) -sum(kucunrizhi.posunshuliang) -sum(kucunrizhi.weixiushuliang) )as jieyushuliang1, substring_index(group_concat(kucunrizhi.jiagongyigong order by kucunrizhi.createtime desc),‘,‘,1)as jiagongyigong, substring_index(group_concat(kucunrizhi.danwei order by kucunrizhi.createtime desc),‘,‘,1)as danwei, substring_index(group_concat(kucunrizhi.wuliaobianma order by kucunrizhi.createtime desc),‘,‘,1)as wuliaobianma, substring_index(group_concat(kucunrizhi.createtime order by kucunrizhi.createtime desc),‘,‘,1)as createtime from wuliaokucunrizhi as kucunrizhi <where> <if test="mingchengguige != null and mingchengguige != ‘‘ "> <bind name="mingchengguigePattern" value="‘%‘+mingchengguige+‘%‘"/> and kucunrizhi.mingchengguige like #{mingchengguigePattern} </if> <if test="jiagongyigong != null and jiagongyigong != ‘‘ "> and kucunrizhi.jiagongyigong = #{jiagongyigong} </if> <if test="rukukufang != null and rukukufang != ‘‘ "> and kucunrizhi.rukukufang = #{rukukufang} </if> <if test="xiangmuweihu != null and xiangmuweihu != ‘‘"> and kucunrizhi.xiangmuweihu = #{xiangmuweihu} </if> <if test="dalei != null and dalei != ‘‘ "> and kucunrizhi.dalei = #{dalei} </if> <if test="s_btime != null"> and kucunrizhi.createtime >= #{s_btime} </if> <if test="s_etime != null"> and kucunrizhi.createtime <= date_add(#{s_etime}, interval 1 day) </if> <if test="createtime != null"> and kucunrizhi.createtime = #{createtime} </if> <if test="updatetime != null"> and kucunrizhi.updatetime = #{updatetime} </if> </where> GROUP BY kucunrizhi.mingchengguige ORDER BY createtime DESC )rizhi1 right outer join wuliaokucunrizhi as rizhi2 on rizhi1.mingchengguige = rizhi2.mingchengguige <where> <if test="mingchengguige != null and mingchengguige != ‘‘ "> <bind name="mingchengguigePattern" value="‘%‘+mingchengguige+‘%‘"/> and rizhi2.mingchengguige like #{mingchengguigePattern} </if> <if test="jiagongyigong != null and jiagongyigong != ‘‘ "> and rizhi2.jiagongyigong = #{jiagongyigong} </if> <if test="rukukufang != null and rukukufang != ‘‘ "> and rizhi2.rukukufang = #{rukukufang} </if> <if test="xiangmuweihu != null and xiangmuweihu != ‘‘"> and rizhi2.xiangmuweihu = #{xiangmuweihu} </if> <if test="dalei != null and dalei != ‘‘ "> and rizhi2.dalei = #{dalei} </if> <if test="createtime != null"> and rizhi2.createtime = #{createtime} </if> <if test="updatetime != null"> and rizhi2.updatetime = #{updatetime} </if> </where> group by rizhi2.mingchengguige <if test="show5Zero == null"> having (qichukucun != 0) or (shourushuliang != 0) or (fachushuliang != 0) or (tuihuishuliang != 0) or (posunshuliang != 0) or (weixiushuliang != 0) or (jieyushuliang != 0) </if> <if test="sort != null and sort != ‘‘"> order by ${sort} ${order} </if> <if test="sort == null"> order by createtime desc </if> </select>
虽然这么长的sql可能是一开始没把数据库关联设计好等原因
但是难免还会有很复杂的sql
这情况再用mybatis plus去java代码实现,简直了
原文:https://www.cnblogs.com/ukzq/p/12539351.html