企业网站网络营销,优化设计四年级下册语文答案,柞水县城乡建设局网站,asp网站下载最近遇到一个场景就是Java开发中#xff0c;需要循环多个表名#xff0c;然后用同样的查询操作分别查表#xff0c;最终得到N个表中查询的结果集合。在查询内容不一致时Java中跨表查询常用的是遍历表名集合循环查库#xff0c;比较耗费资源#xff0c;效率较低。在查询内容…最近遇到一个场景就是Java开发中需要循环多个表名然后用同样的查询操作分别查表最终得到N个表中查询的结果集合。在查询内容不一致时Java中跨表查询常用的是遍历表名集合循环查库比较耗费资源效率较低。在查询内容格式一致的情况下便可以用Java的数据库连接工具模拟mysql中union的操作这里我用的数据库交互工具是mybatis。 首先介绍下union
在mysql中被称为集合操作操作类型分为两种UNION DISTINCT 和 UNION ALL其中UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重UNION ALL的功能为合并多个查询的结果不去重。
这里mybatis在实现union操作时用到的是foreach 标签foreach标签用于循环语句它很好的支持了数据和 List、set 接口的集合并对此提供遍历的功能。最常用的地方就是对于一些 SQL 语句中含有 in 条件或者批量处理数据需要迭代条件时可以使用 foreach 。利用foreach这一迭代特性也满足了union多个表的使用场景整体思路框架代码如下
实现层设置每一个union的查询sql的业务代码
ListMap queryCondition new ArrayList();
//这里的namelIst代表存储联合查询表名的集合
for (Map nameMap: namelIst) {Map conditionMap new HashMap();//查询内容String fields a.*,b.*;//拼接表名String tableName table_aaa a , nameMap.get(tableName) b;//查询条件String joinsql a.nameId b.id ;//将循环一次的查询条件表名内容放入一个集合中当做union的一个查询部分conditionMap.put(fields, fields);conditionMap.put(tableName, tableName);conditionMap.put(joinsql, joinsql);//放入总的集合中作为传入mapper查询的条件queryCondition.add(conditionMap);}//执行查询ListMap pages this.baseMapper.getSelect(queryCondition);
传入的查询参数为一个listmap集合。
/*** union查询示范* param queryCondition* return*/ListMap getSelect(Param(queryCondition) ListMap queryCondition);
xml文件的写法
select idgetSelect resultTypejava.util.Mapforeach collectionqueryCondition itemcondition separatorunion allSELECT ${condition.fields}FROM ${condition.tableName}where ${condition.joinsql}/foreach/select
这里对foreach标签中的标签进行一下简单的总结
foreach 标签有六个属性itemindexcollectionopen closeseparator
属性 作用item表示集合中每一个元素或子集合进行迭代循环时的别名index 指定一个名字表示在迭代过程中每次迭代到的位置open 表示该语句以什么开始如in 条件语句以’(开始)close 表示该语句以什么结束如in 条件语句以’)结束。separator 表示在每次进行迭代之间以什么符号作为分隔符如in 条件语句以‘,’作为分隔符collection 该属性是必选的但在不同情况下该属性的值是不一样的主要有以下 3 种情况: (1)如果传入的是单参数且参数类型是一个 Listcollection 属性值为 list (2)如果传入的是单参数且参数类型是一个 array 数组collection 的属性值为 array (3)如果传入的参数是多个需要把它们封装成一个 Map当然单参数也可以封装成 Map。Map 的 key 是参数名collection 属性值是传入的 List 或 array 对象在自己封装的 Map 中的 key。
通常在使用foreach标签时候都是用来当做批量查询或者更新或者where后面的条件使用大概这样
foreach collection各种集合 item循环体中的别名 indexindex open( separator, close)自定义的各种参数
/foreach
这里的操作属于mybatis的一个灵活运用算是一个处理思路鉴于网上现有相关思路不多个人完成了测试可以当做一种解决办法提高一下程序的执行效率避免多次连库。