Mybatis中如何将SQL中查询出来的数据循环遍历的插入到一张表中
代码部分:

注解:Mybatis中的xml文件和mapper对应映射
<!--从视图中查表,获取数据来源-->
<select id="selectReportResult" parameterType="map" resultType="java.util.Map">
select * from ${tableName}
</select>
<!--从视图中查表,获取数据来源-->
<select id="selectReportResultOnlyOne" parameterType="map" resultType="java.util.Map">
select * from ${tableName} limit 1
</select>
<!--查询需要计算的视图名以及其日期字段-->
<select id="selectDataNameOfNeedCal" parameterType="map" resultType="java.lang.String">
SELECT DISTINCT viewName from YDOracle_RPT.Formula
</select>
<!--根据传入的表分类,查询具体分类的表数值-->
<select id="selectReportResultBySql" parameterType="java.lang.String" resultType="java.util.Map">
${sql}
</select>
<!--根据传入的表分类,查询具体分类的表数值-->
<select id="selectReportCountBySql" parameterType="java.lang.String" resultType="java.lang.Integer">
${sql}
</select>
<select id="getColumnNames" parameterType="java.lang.String" resultType="java.lang.String">
select COLUMN_NAME from information_schema.COLUMNS where table_name = ${tableName}
<if test='dbName != null and dbName!= ""'>
and table_schema = ${dbName}
</if>
</select>
<select id="getTableName" parameterType="java.lang.String" resultType="java.lang.String">
SELECT table_name FROM information_schema.TABLES WHERE table_name = ${tableName}
<if test='dbName != null and dbName!= ""'>
and table_schema = ${dbName}
</if>
</select>
<!-- 将取出的数据插入到表中 -->
<!-- 1.ddl使用update标签 -->
<!-- 2.ddl使用${}取值 -->
<!-- 3.动态列实际上只是普通的foreach -->
<insert id="insertData" parameterType="java.util.List">
insert INTO ${tableName}
<foreach collection="key" item="key" open="(" close=")" separator="," >
${key}
</foreach>
values
<foreach item="items" index="index" collection="value" separator=",">
<foreach collection="items" item="item" open="(" close=")" separator=",">
${item}
</foreach>
</foreach>
</insert>
<update id="updateTableStructure" parameterType="java.lang.String">
${sql}
</update>
<update id="dropExistsTable" parameterType="String">
drop table if exists ${tableName}
</update>
<!-- 创建新的表 表名取值${} -->
<!-- 2.因为是未知列故返回结果不能再是对象, 此处使用map, 实际上返回的是list<map>, 如果表里有id等唯一值也可以 单纯返回map, key用ID -->
<update id="createNewTable" parameterType="String">
CREATE TABLE IF NOT EXISTS ${tableName} (
`id` BIGINT (20) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
`add_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
<foreach collection="Key" item="listKeyItem" separator=",">
${listKeyItem} varchar(200)
</foreach>
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
</update>
<!--获取最大日期-->
<select id="getMaxDate" parameterType="String" resultType="java.lang.String">
select
<if test='formatStr == "" || formatStr == null'>
max(${dateStr})
</if>
<if test="formatStr == 'day'">
max(DATE_FORMAT(${dateStr},'%Y-%m-%d'))
</if>
<if test="formatStr == 'week'">
max(DATE_FORMAT(${dateStr},'%Y%u'))
</if>
<if test="formatStr == 'month'">
max(DATE_FORMAT(${dateStr},'%Y%m'))
</if>
<if test="formatStr == 'year'">
max(DATE_FORMAT(${dateStr},'%Y'))
</if>
from ${tableName}
</select>
<!--获取最小日期-->
<select id="getMinDate" parameterType="String" resultType="java.lang.String">
select
<if test='formatStr == "" || formatStr == null'>
min(${dateStr})
</if>
<if test="formatStr == 'day'">
min(${dateStr})
</if>
<if test="formatStr == 'week'">
min(DATE_FORMAT(${dateStr},'%Y%u'))
</if>
<if test="formatStr == 'month'">
min(DATE_FORMAT(${dateStr},'%Y%m'))
</if>
<if test="formatStr == 'year'">
min(DATE_FORMAT(${dateStr},'%Y'))
</if>
from ${tableName}
</select>
<!--删除-->
<delete id="deleteDataByDateStr" parameterType="String" >
delete from ${tableName} where ${dateStr} = ${maxDate}
</delete>
<!--删除-->
<delete id="deleteData" parameterType="String" >
delete from ${tableName}
</delete>
<select id="searchData" parameterType="java.util.Map" resultType="java.util.Map">
select * from ${tableName}
where 1=1
<!--<if test="startTime!=null and endTime!=null">-->
<!--and entryDate between ${startTime} and ${endTime}-->
<!--</if>-->
<if test="queryStr!=null">
<foreach collection="queryStr.keys" item="itemName">
and ${itemName} = #{queryStr[${itemName}]}
</foreach>
</if>
</select>
<select id="searchGroupData" parameterType="java.lang.String" resultType="java.util.Map">
select userId,userName,sum(${sumItem}) as ${sumItem} from ${tableName}
where 1=1
<if test="startTime!=null and endTime!=null">
and ${queryDate} between #{startTime} and #{endTime}
</if>
<if test="group!=null">
group by ${group}
</if>
</select>
1459

被折叠的 条评论
为什么被折叠?



