Mybatis中如何将SQL中查询出来的数据循环遍历的插入到创建的一张表中

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

代码部分:

在这里插入图片描述
注解:Mybatis中的xml文件和mapper对应映射

<?xml version="1.0" encoding="UTF-8"?>
<!--从视图中查表,获取数据来源-->
<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值