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


    功能描述

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

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

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

    实现思路

    Mybatis支持2种常见返回值。

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

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

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

    实现步骤

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

    1. <resultMap id="listDataMap" type="map" autoMapping="true" >
    2. <collection property="entryList" ofType="com.ruoyi.quartz.domain.SynDataEntry" autoMapping="true" javaType="list">
    3. collection>
    4. resultMap>
    5. <select id="listDataByConfig" resultMap="listDataMap">
    6. select
    7. <foreach collection="objectConfig.synFieldConfigList"
    8. item="item" open="" close="" separator=",">
    9. <if test='(item.srcField != null and item.srcField.trim() != "")
    10. and (item.srcType == null or (item.srcType != null and !item.srcType.trim().toUpperCase().contains("LIST")))'>
    11. t.${item.srcField}
    12. if>
    13. foreach>
    14. ,de.*
    15. from ${objectConfig.srcObject} t
    16. left join syn_data_entry de on de.object_id = ${objectConfig.id} and de.syn_data_id = t.id
    17. <trim prefix="WHERE" suffixOverrides="and">
    18. t.task_id = #{task.id} and
    19. <foreach collection="objectConfig.synFieldConfigList"
    20. item="item" open="" close="" separator=" and ">
    21. <if test="item.conditional == '1'.toString()
    22. and item.targetValue != null
    23. and item.targetValue != ''
    24. and item.delFlag == '0'.toString()
    25. and item.srcField != null
    26. and item.srcField != ''
    27. ">
    28. t.${item.srcField} ${item.targetValue}
    29. if>
    30. foreach>
    31. trim>
    32. select>

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

    objectConfig对应的是表配置对象。

    synFieldConfigList对应的是字段配置对象

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

    Mapper代码参考:

    1. /**
    2. * 根据对象配置,动态查询数据。还会读取同步数据子表。
    3. * @author namelessmyth
    4. * @return List> 子表的key为entryList,类型为List
    5. */
    6. public List> listDataByConfig(
    7. @Param("task") SynTask task,
    8. @Param("objectConfig") SynObjectConfig objectConfig
    9. );

  • 相关阅读:
    整数对最小和
    ns2无线局域网隐藏节点仿真实验
    第2次作业
    Redis持久化
    知识图谱从入门到应用——知识图谱推理:基础知识
    jenkies构建springboot
    使用RNN像进行写作
    Linux性能优化 - CPU优化
    19.13 Boost Asio 发送TCP流数据
    前端缓存
  • 原文地址:https://blog.csdn.net/namelessmyth/article/details/126338505