mybatis 返回Map<String,List<Entity>> 格式数据

本文介绍了如何通过优化Java代码,将原本多次查询数据库的操作改为一次性查询并转换成Map<String, List<Entity>>结构。具体做法是使用MyBatis的resultMap配置,结合Java 8的Stream API进行集合转换,提升了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建实体类

@Data
public class DisabilityManageVo1
{
    private String disabilityManageId;

    private List<DisabilityManageVo> list;
}

2、mapper

public List<DisabilityManageVo1> selectCompletionTime1(List<String> idList);

3、XML

<resultMap id="resultMap" type="com.hanclouds.system.domain.vo.DisabilityManageVo1">
        <result column="id" property="disabilityManageId"/>
        <collection property="list" ofType="com.hanclouds.system.domain.vo.DisabilityManageVo">
            <result property="completionTime" column="completionTime"/>
            <result property="nextServerTime" column="nextServerTime"/>
        </collection>
    </resultMap>

<select id="selectCompletionTime1" parameterType="list" resultMap="resultMap">
        select
            npt.completion_time as completionTime,
            dm.id as id
        from
            nursing_personnel_task npt
        inner join
            plan_month pm on npt.rele_monthly_id = pm.id
        inner join
            disability_manage dm on pm.dis_id = dm.id
        <where>
            npt.task_states = '2'
            and DATE(npt.completion_time) &lt; DATE(NOW())
            and
            <foreach collection="list" item="id" separator="or" open="(" close=")">
                dm.id = #{id}
            </foreach>
        </where>
        ORDER BY npt.completion_time desc
    </select>

4、转换成Map<String,List<Entity>> 格式

List<DisabilityManageVo1> disabilityManageVos = disabilityManageMapper.selectCompletionTime1(idList);
            Map<String, List<DisabilityManageVo>> collect = disabilityManageVos.stream().collect(Collectors.toMap(DisabilityManageVo1::getDisabilityManageId, DisabilityManageVo1::getList));

优化查询,原来是多次查询数据库,现在是查询一次数据库返回所有数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值