4.mybatis使用resultMap时一对多的关系使用HashMap收集不使用实体类

本文介绍了如何在Mybatis中使用resultMap以HashMap形式处理一对一和一对多关系,通过实例展示了如何在查询结果中收集和组织数据,包括tempId、tempName和tempDetailName。

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

mybatis使用resultMap时一对多的关系使用HashMap收集不使用实体类

结果集为:
在这里插入图片描述

  <resultMap id="map" type="HashMap">
        <id property="tempId" column="tempId"></id>
        <result property="tempName" column="tempName"></result>
        <collection property="list" javaType="ArrayList" ofType="HashMap">
            <id property="tempDetailId" column="tempDetailId"></id>
            <result property="tempDetailName" column="tempDetailName"></result>
        </collection>
    </resultMap>

    <select id="queryTemp" resultMap="map">
        select t.temp_id tempId, temp_name tempName,temp_detail_id tempDetailId,temp_detail_name tempDetailName
        from template t LEFT JOIN template_detail td on t.temp_id=td.temp_id
    </select>
List<HashMap> list = dao.queryTemp();
/*如以下格式
tempId:1,tempName:'减员',list:[{tempDetailId:1,tempDetailName:'*身份证号码'}]
*/
好的,针对你的问题,我可以给你提供以下思路: 1.MyBatis 的映射文件中,使用 resultMap 标签定义结果映射关系,其中使用 collection 标签定义个子查询结果的映射关系,并使用 column 标签指定用于关联的列名。 2.Java 代码中,定义一个包含个子查询结果的 Map 对象,使用 MyBatis 的 SqlSession 对象执行查询操作,并将查询结果映射到 Map 对象中。 下面是一个示例的 MyBatis 映射文件和 Java 代码: MyBatis 映射文件: ```xml <!-- 定义 resultMap --> <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="orders" column="id" javaType="java.util.List" ofType="Order" resultMap="orderMap"/> </resultMap> <resultMap id="orderMap" type="Order"> <id property="id" column="id"/> <result property="name" column="name"/> </resultMap> <!-- 定义查询语句 --> <select id="getUser" resultMap="userMap"> SELECT u.id, u.name, o.id, o.name FROM user u INNER JOIN order o ON u.id = o.user_id WHERE u.id = #{id} </select> ``` Java 代码: ```java Map<String, Object> userMap = new HashMap<>(); userMap.put("id", 1); SqlSession sqlSession = sqlSessionFactory.openSession(); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUser(userMap); System.out.println(user); } finally { sqlSession.close(); } ``` 注意,这里的 User 和 Order 是自定义的实体类,用于封装查询结果。同,User 中包含了一个 List 类型的 orders 属性,用于存储个 Order 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值