Mybatis一对多关联查询,返回值Map,字段自动映射

功能描述

由于查询字段和表名都要支持动态配置,故查询返回值需要为List<Map<String,Object>>,不定义值对象。

查询结果列需要支持自动映射,不配置类属性和数据库字段的映射关系。

查询需要支持一对多关联查询。

实现思路

Mybatis支持2种常见返回值。

1. 在resultType中配置一个Pojo类,Mybatis会自动根据命名规则将SQL语句中的字段转换成pojo类中的属性。

2. 使用resultMap,一般是需要手供配置映射关系。

要实现描述的功能,可以使用resultMap的collection元素,并且将resultMap的autoMapping="true"让resultMap支持自动映射了(默认是false)并将type="map"。然后在SQL中进行表关联。就可以将返回值映射为Map了。

实现步骤

resultMap和SQL配置。代码参数如下:

    <resultMap id="listDataMap" type="map" autoMapping="true" >
		<collection property="entryList" ofType="com.ruoyi.quartz.domain.SynDataEntry" autoMapping="true" javaType="list">
		</collection>
	</resultMap>

	<select id="listDataByConfig" resultMap="listDataMap">
		select
		<foreach collection="objectConfig.synFieldConfigList"
				 item="item" open="" close="" separator=",">
			<if test='(item.srcField != null and item.srcField.trim() != "")
				and (item.srcType == null or (item.srcType != null and !item.srcType.trim().toUpperCase().contains("LIST")))'>
				t.${item.srcField}
			</if>
		</foreach>
		,de.*
		from ${objectConfig.srcObject} t
		left join syn_data_entry de on de.object_id = ${objectConfig.id} and de.syn_data_id = t.id
		<trim prefix="WHERE" suffixOverrides="and">
			t.task_id = #{task.id} and
			<foreach collection="objectConfig.synFieldConfigList"
					 item="item" open="" close="" separator=" and ">
				<if test="item.conditional == '1'.toString()
						 and item.targetValue != null
						 and item.targetValue != ''
						 and item.delFlag == '0'.toString()
						 and item.srcField != null
						 and item.srcField != ''
				">
					t.${item.srcField} ${item.targetValue}
				</if>
			</foreach>
		</trim>
	</select>

上面的SQL,select后面的字段名,表名都是根据配置对象动态生成的。

objectConfig对应的是表配置对象。

synFieldConfigList对应的是字段配置对象

动态的数据表可能还会存在子表关联数据,也就是sql中的syn_data_entry表。

Mapper代码参考:

    /**
     * 根据对象配置,动态查询数据。还会读取同步数据子表。<br>
     * @author namelessmyth
     * @return List<Map<String,Object>> 子表的key为entryList,类型为List<SynDataEntry>
     */
    public List<Map<String,Object>> listDataByConfig(
            @Param("task") SynTask task,
            @Param("objectConfig") SynObjectConfig objectConfig
    );

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值