MyBatis关联查询,查询主表列表数据时同时返回子表数据,只有一次查询

原创
2016/07/08 15:19
阅读数 4.9K

经过OSCER的指引及MyBatis的一些说明总结如下:

主Bean:

public class MainBean {
	
	private static final long serialVersionUID = 1L;
	private String name;		// name
	private String agreementType;		// 所属类型
	private List<SubBean> oaAttachmentList = Lists.newArrayList();		// 子表列表
        ……
}

子Bean:

public class SubBean {
	
	private static final long serialVersionUID = 1L;
	private MainBean ownerId;		// 所属ID 父类
	private String fileName;		// 附件名称
	private Long fileSize;		// 文件大小
	private String saveName;		// 文件在磁盘的名称
	private String savePath;		// 文件在磁盘的路径
	private String contentType;		// 文件类型
        ……
}

XML映射:

<resultMap id="myResultMap" type="MainBean">
    	<id property="id" column="id"/>
    	<result property="name" column="name"/>
    	<result property="agreementType" column="agreement_type"/>
    	
    	
    	<collection property="oaAttachmentList" column="owner_id"
    		javaType="ArrayList" ofType="SubBean">
    		<id property="id" column="file_id"/>
    		<result property="fileName" column="file_name"/>
    		<result property="fileSize" column="file_size"/>
    		<result property="saveName" column="save_name"/>
    		<result property="savePath" column="save_path"/>
    		<result property="contentType" column="content_type"/>
    	</collection>
    	
    </resultMap>
    
    <select id="findList2" resultMap="myResultMap">
		SELECT 
			a.id,
			a.name ,
			a.agreement_type,
			
			t1.id as file_id,
			t1.file_name,
			t1.file_size,
			t1.save_name,
			t1.save_path,
			t1.content_type
		FROM oa_template_file a
			left join oa_attachment t1 on t1.owner_id=a.id
		<where>
			a.del_flag = '0'
			
		</where>
		
	</select>

直接执行SQL得出来的结果对于主表数据来说会有重复的,但是MyBatis会根据映射关系处理,将它封装为一条记录,子表也会被封装了一个List。这个好处就是一条语句实现所有数据查询。

展开阅读全文
打赏
0
5 收藏
分享
加载中
更多评论
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部