resultMap之collection聚集两种实现方式

最近做得项目用到了MyBatis处理一对多的映射关系,下面的两个方法中用到了集合的嵌套查询方法,下面仔细学习一下这两种方式

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:

select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活但会将执行多次嵌套的SQL语句。

resultMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

两种加载方式格式如下:
集合的嵌套查询(select)

SQL语句 SELECT i.isoc_name extIsocName, i.isoc_logo extCommentUserNo, ic.comment_id, ic.comment_praise_num, ic.comment_dt, ic.comment_content FROM isoc i, isoc_comment ic WHERE i.isoc_id = ic.comment_isoc_id AND ic.comment_user_id = #{2} LIMIT #{0},#{1} select comment_photo_url from isoc_comment_photo where comment_id = #{comment_id} 注意:column属性的值必须与相应的SQL查询语句中的列名相同。MyBatis会将第一条SQL语句查询出来的该列的值用于所嵌套的SQL映射语句的入参。因第一条SQL语句查询出来的每个该列的值都将用于执行另一个SQL语句,所以嵌套的SQL语句将被多次执行。

集合的嵌套结果(resultMap)

<resultMap=“另一个resultMap的ID” type=“另一Java类名”>


  1. SELECT  
    
  2.     u.id as user_id,  
    
  3.     u.name as user_name,  
    
  4.     u.create_date,  
    
  5.     r.id as role_id,  
    
  6.     r.name as role_name  
    
  7. FROM t_user u  
    
  8. LEFT JOIN t_user_role ur ON(u.id=ur.user_id)  
    
  9. LEFT JOIN t_role r ON(r.id=ur.role_id) where u.id=1  
    
  10. <id property="id"  column="user_id" />  
    
  11. <result property="name" column="user_name"/>  
    
  12. <result property="createDate" column="create_date"/>  
    
  13. <collection property="roles"  ofType="Role" javaType="ArrayList">   
    
  14.     <id property="id"  column="role_id"/>   
    
  15.     <result property="name"  column="role_name"/>  
    
  16. </collection>   
    
  17. <id property="id"  column="role_id"/>   
    
  18. <result property="name"  column="role_name"/>  
    
  19. <id property="id"  column="user_id" />  
    
  20. <result property="name" column="user_name"/>  
    
  21. <result property="createDate" column="create_date"/>  
    
  22. <collection property="roles"  ofType="Role" javaType="ArrayList" resultMap="roleResult"/>   
    

注意:column属性的值必须与相应的SQL查询语句的列名一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值