mybatis自增id和批量插入foreach
1.mybatis返回自增id
<insert id="insert" parameterType="com.fwj.entity.XmlHead">
insert into xml_head (type_flag, tran_code,
seqno, size, add_flag
)
values (#{typeFlag,jdbcType=INTEGER}, #{tranCode,jdbcType=VARCHAR},
#{seqno,jdbcType=VARCHAR}, #{size,jdbcType=VARCHAR}, #{addFlag,jdbcType=VARCHAR}
)
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
标签说明:
1.resultType:自增id的类型
2.order:表示或者id是在插入之前还是之后,AFTER/BEFORE两个取值
3.keyProperty:表示新增的id值赋值到哪个属性值
注意:
id自增之后赋值给对象中的id中,插入返回值仍然是影响行数
2.mybatis批量插入
<insert id="saveBatchByNative" parameterType="com.fwj.entity.XmlBody">
insert into xml_body (head_id, pkuuid,
rilenane, pageno, filler1,
ftller2)
values
<foreach collection="xmlBodies" separator="," item="xml_body">
(#{xml_body.headId,jdbcType=BIGINT}, #{xml_body.pkuuid,jdbcType=VARCHAR},
#{xml_body.rilenane,jdbcType=VARCHAR}, #{xml_body.pageno,jdbcType=VARCHAR}, #{xml_body.filler1,jdbcType=VARCHAR},
#{xml_body.ftller2,jdbcType=VARCHAR})
</foreach>
</insert>
标签说明:
1.collection:批量插入的集合,mapper传入参数
2.separator:分隔符
3.item:item属性值默认为item,可以随便起别名,下面指定元素的集合名字
3.批量插入的注意事项
mybatis中Oracle的动态插入的更新
1.无序列的动态插入 gpt生成oracle的mybatis的批量插入代码 完整的xml代码 并添加jdbcType
INSERT INTO student (id,name,sex)
<foreach collection="students" item="item" separator="union all">
select
#{item.name,jdbcType=VARCHAR},
#{item.sex,jdbcType=CHAR}
from dual
</foreach>
注意:1.1 如果传入的值为空的话,jdbcType可以保证不报类型错误(或者在myabatis配置文件中设置全局的空值处理)
1.2 separator="union all" 保证sql的拼接
2.有序列的动态插入
INSERT INTO student (id,name,sex)
select 序列名字.nextval, t.* from (
<foreach collection="students" item="item" separator="union all">
select
#{item.name,jdbcType=VARCHAR},
#{item.sex,jdbcType=CHAR}
from dual
</foreach>
) t
注意:2.1 序列名字和括号位置
3.批量更新
begin
<foreach collection="students" item="item" index="index" separator=";">
update link_student_file
<set>
<if test="null != item.name and '' != item.name">url_type = #{item.name},</if>
<if test="null != item.sex and '' != item.sex">file_type = #{item.sex},</if>
<if test="null != item.createTime">create_time = #{item.createTime},</if>
</set>
WHERE id = #{item.id}
</foreach>
;end;
注意:3.1 所有的变量的前缀item.不要拉下 特别是if中
3.2 判断时间的时候不需要'' !=,时间不需要判断空字符