mybatis自增id和批量插入foreach

文章介绍了如何在Mybatis中实现自增ID的获取以及使用foreach进行批量插入的方法,包括了insert标签的使用,如selectKey标签来获取自增ID,并将其赋值给对象。同时,展示了批量插入XMLBody的示例和动态SQL的使用,如在Oracle中使用unionall进行动态插入和批量更新的操作,强调了jdbcType的重要性以及在不同情况下的使用策略。
摘要由CSDN通过智能技术生成

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.不要拉下 特别是if3.2 判断时间的时候不需要'' !=,时间不需要判断空字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值