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} tleft 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 != nulland item.targetValue != ''and item.delFlag == '0'.toString()and item.srcField != nulland 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);
Mybatis一对多关联查询,返回值Map,字段自动映射相关推荐
- mybatis一对多关联查询两种方式
mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...
- mybatis一对多关联查询_Mybatis 一对一、一对多的关联查询 ?
<mapper namespace="com.lcb.mapping.userMapper"> <!--association 一对一关联查询 --> &l ...
- mybatis一对多关联查询将结果封装到嵌套list
DishDto中有个List集合保存DishFlavor对象,DishFlavor根据关联查询获得,一个dish对应多个dishflavor.想要联合查询自动将DishFlavor封装成集合需要用co ...
- mybatis一对多关联查询_一对一,一对多,多对多查询及延迟加载(N+1问题)分析
推荐学习 重识SSM,"超高频面试点+源码解析+实战PDF",一次性干掉全拿走 全网独家的"MySQL高级知识"集合,骨灰级收藏,手慢则无 "吃&qu ...
- 15、mybatis一对多关联查询 collection定义关联集合封装规则及懒加载
文章目录 1.collection定义关联集合封装规则单步查询 1).Dept增加集合属性 2).DeptMapper增加查询接口 3).DeptMapper.xml增加collection配置 4) ...
- Mybatis 一对多关联查询collection用法
使用resultMap, select 标签, resultMap的中的collection表示一对多,column对应select标签中的sql里的字段或者别名,当两个表字段名称有相同的情况下,可以 ...
- Mybatis一对多关联查询详解
要点 在Student类中添加List<Classes> classList 属性 在Classes类中添加List<Student> students属性 在ClassesM ...
- MyBatis查询,返回值Map或ListMap
https://www.cnblogs.com/xiaoliu66007/p/7908181.html 一.返回值Map 1.mapper.xml [html] view plain copy < ...
- Mybatis多表关联查询(一对多关联查询)
1.Mybatis一级缓存与二级缓存 目的:提高查询效率,降低数据库查询压力,提升系统整体性能. 一级缓存:默认开启,Session级别,同一个会话内生效. 命中缓存的情况:statementid.S ...
最新文章
- 数据结构 算法与应用C 语言描述第六章,数据结构算法与应用-C语言描述002.pdf
- python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解
- python 链式比较 2._特色的Python序列解包、链式赋值、链式比较
- 蓝桥杯_算法训练_动态数组使用
- Product description search in opportunity line item
- 增删改查(curd)
- 最全ACM常用STL
- linux系统挂载NTFS格式文件系统
- 分布式数据库中全局唯一主键
- sonic——可替代Elasticsearch的简单搜索引擎
- 学习webpack系列之二 ---- (管理静态资源)
- WEB前端视频教程网站推荐
- FineReport学习(一)——常用操作介绍
- Java实现发送短信
- matlab无法用mcc,使用matlab的mcc时为什么会出现fopen错误?
- 4. ElasticSearch——aggregations聚合分析
- 有了自动驾驶和共享无人车,未来出行将会是什么样的体验?
- 泛域名证书ACME 阿里云域名
- 【ArnoldC4D】1.ArnoldToC4D_基本概念及原理(sampling_and_camera_sampl)
- git修改已提交的信息