mybatis操作oracle的批量导入跟操作MySQL批量导入略有不同,如果使用同MySQL一样的语句进行导入,会出现奇怪的报错.至于原因和解决方法,网上众说纷纭,在这里不再赘述,仅提供一个解决方法.
<!--表没有主键时,添加属性 useGeneratedKeys="false"-->
<insert id="batchImportBranch" parameterType="list">
<foreach collection="list" item="item" index="index" separator=";" open="begin" close=";end;">
INSERT INTO T_PGW_BANK_BRANCH
(
ID,
PROC_CODE,
BANK_CODE,
BRANCH_ID,
BRANCH_NAME,
BRANCH_TYPE,
AREA_CODE,
RESERVE1,
RESERVE2,
STAT,
CREATED_AT,
CREATED_BY,
UPDATED_AT,
UPDATED_BY
)
VALUES
(
SEQ_PGW_BANK_BRANCH.NEXTVAL,
#{item.procCode, jdbcType=VARCHAR},
#{item.bankCode, jdbcType=VARCHAR},
#{item.branchId, jdbcType=VARCHAR},
#{item.branchName, jdbcType=VARCHAR},
#{item.branchType, jdbcType=VARCHAR},
#{item.areaCode, jdbcType=VARCHAR},
#{item.reserve1, jdbcType=VARCHAR},
#{item.reserve2, jdbcType=VARCHAR},
#{item.stat, jdbcType=CHAR},
SYSDATE,
#{item.createdBy, jdbcType=VARCHAR},
null,
null
)
</foreach>
</insert>
分页:
SELECT
xx,xx,xx
FROM
(
SELECT
xx,xx,xx,rownum r
FROM T_TEST t1
WHERE NOT EXISTS (
SELECT 1
FROM T_TEST_NOBUS WHERE xx=t1.xx AND xx=t1.xx
) AND <![CDATA[rownum <= #{endNum}]]>
) WHERE <![CDATA[r > #{startNum}]]>思路: startNum:开始的记录,endNum=startNum+pageSize(每页大小):结束的记录。
根据条件查询出带rownum,并用endNum限制了记录数的子表,再查询需要的字段,并用startNum限定开始的记录