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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis中的ResultMap可以用来映射一对多关系。在ResultMap中,可以使用collection标签来定义一个集合属性,用来表示一对多关系。在集合属性中,可以使用result标签来定义子对象的映射规则。例如: <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="name" column="name"/> <collection property="orders" ofType="Order"> <id property="id" column="order_id"/> <result property="name" column="order_name"/> </collection> </resultMap> 在上面的例子中,User对象包含一个orders属性,用来表示一个用户可以有多个订单。使用collection标签来定义orders属性,并使用ofType属性来指定子对象的类型为Order。在集合属性中,使用id和result标签来定义子对象的映射规则。这样,在查询结果中,就可以将多个订单映射到一个User对象中的orders属性中。 ### 回答2: 在MyBatis中,ResultMap是一种用于将查询到的结果集映射成Java对象的机制。当查询结果集中包含多个对象的属性,就需要使用ResultMap一对多映射。 一对多映射的实现,需要在ResultMap中定义一个collection元素来表示将多个对象映射成一个集合。collection元素中需要设置property、ofType和select等属性。 property属性表示映射到结果集中的查询条件,也就是查询多个对象需要根据哪个属性进行关联。 ofType属性表示集合元素的类型,这里表示集合中元素的类型为哪个Java类。 select属性表示查询的语句,对应于查询结果集的collection列。 例如,以下是一段使用ResultMap实现一对多映射的示例代码: <resultMap id="UserMap" type="User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <collection property="books" ofType="Book" select="selectBooksByUser" column="id"/> </resultMap> 在上面的代码中,UserMap是一个ResultMap配置,books是User类中的一个List<Book>类型属性。通过collection元素的配置,表示User对象与多个Book对象之间存在一对多关系。 需要注意的是,以上的示例代码中,还需要在mapper文件中定义selectBooksByUser语句,用于查询对应的Book对象。同,需要配置查询语句中的查询条件,也就是column属性,与User对象的id属性关联起来。 通过以上的配置,如果查询结果集中包含了User对象与多个Book对象,MyBatis就会根据配置进行自动映射,将查询结果集中的数据转化为Java对象的形式,方便我们进行业务逻辑的处理。 ### 回答3: MyBatis是一种轻量级的ORM框架,支持复杂的SQL查询。其中,ResultMapMyBatis非常重要的一种映射规则,可以将查询结果映射到Java对象中。 在MyBatis中,使用ResultMap进行一对多的映射,可以通过以下步骤完成: 1. 定义主实体类和从实体类一对多映射中,主实体类代表一端,从实体类代表多端。例如,在一个学校的管理系统中,Student代表主实体类,Grade代表从实体类。一名学生可以拥有多个成绩单。 2. 在主实体类中增加从实体类的集合 在主实体类中增加从实体类的集合属性,如下所示: public class Student { private int id; private String name; private List<Grade> grades; } 3. 定义ResultMap 定义ResultMap,需要使用collection标签来映射从实体类的集合属性。注意,collection标签的属性property应该指向主实体类中的集合属性,同需要指定从实体类ResultMap,如下所示: <resultMap id="studentResultMap" type="Student"> <id property="id" column="id"/> <result property="name" column="name"/> <collection property="grades" ofType="Grade" resultMap="gradeResultMap"/> </resultMap> 4. 定义从实体类ResultMap 在从实体类ResultMap中,需要定义每一列的映射关系。同样地,需要定义id标签,指向主实体类的外键列,如下所示: <resultMap id="gradeResultMap" type="Grade"> <id property="id" column="id"/> <result property="subject" column="subject"/> <result property="score" column="score"/> <association property="student" javaType="Student"> <id property="id" column="student_id"/> <result property="name" column="student_name"/> </association> </resultMap> 5. 编写查询语句 最后,编写查询语句,需要使用select标签,并在其中指定ResultMap,如下所示: <select id="getStudent" resultMap="studentResultMap"> SELECT s.id, s.name, g.id, g.subject, g.score, g.student_id, s2.name as student_name FROM student s LEFT JOIN grade g on s.id = g.student_id LEFT JOIN student s2 on g.student_id = s2.id </select> 这样,就完成了从数据库中查询学生及其所拥有的成绩单,并将结果映射为Student的对象。其中,每个Student对象的grades属性是一个List,其中包含多个Grade的对象。 以上就是使用ResultMap实现MyBatis一对多映射的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值