(oracle)Mybatis 实现ID自增且批量新增问题(非java代码循环)
<insert id="saveTemplateCategory" useGeneratedKeys="false" parameterType="***">
//useGeneratedKeys="false" 必须否则会报sql命令未正确结束
INSERT INTO SCM_ASSESS_TEMPLATE_CATEGORY(TEMPLATE_CATEGORY_ID,TEMPLATE_ID, CATEGORY_ID, CATEGORY_TYPE, CATEGORY_NAME, MATERIAL_TYPE,
CATEGORY_CODE,ENABLED_FLAG,
CREATION_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATED_DATE, TENANT_ID)
SELECT ASSESS_TEMPLATE_CATEGORY_S.nextval TEMPLATE_CATEGORY_ID,t.* FROM (
//ASSESS_TEMPLATE_CATEGORY_S.nextval 设置id自增 在外包一层循环为了 id自增
//id自增必须在外层 否则会出现 此处不允许序号错误
<foreach collection="list" item="category" separator="UNION all">
//separator="UNION all" 链接多条数据必用
(SELECT
#{category.templateId} TEMPLATE_ID,
#{category.categoryId} CATEGORY_ID,
#{category.categoryType} CATEGORY_TYPE,
#{category.categoryName} CATEGORY_NAME,
#{category.materialType,jdbcType=VARCHAR} MATERIAL_TYPE,
#{category.categoryCode} CATEGORY_CODE,
#{category.enabledFlag} ENABLED_FLAG,
#{category.creationDate} CREATION_DATE,
#{category.createdBy} CREATED_BY,
#{category.lastUpdatedBy,jdbcType=NUMERIC} LAST_UPDATED_BY,
#{category.lastUpdatedDate,jdbcType=DATE} LAST_UPDATED_DATE,
#{category.tenantId} TENANT_ID
FROM dual
)
</foreach>
) t
</insert>
(别名无所谓)
1.SQL中没有VALUES;
2.<foreach>标签中的(select ..... from dual);
3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。
4.若不需要自增,使用 insert into values ,<foreach>标签中separator的属性为","