oracle使用序列作为id在插入数据时使用(nextval)

1.插入一条数据时

//在selectkey这个标签里面有一个inoutid可以认为是“从前端传来的”,注意这个inoutid是实体类的主键字段,等会在实际的sql里面使用#{}使用到
//还是在这个标签里面有个返回值类型,既然这里需要的id,而且查出来的也是id,返回值也就是long类型了
//最后有一个before,就是在实际sql执行之前就是执行这个selectkey标签,只有这样下面的sql才能使用到id
		<selectKey keyProperty="inoutId" resultType="java.lang.Long" order="BEFORE">
			select SEQ_SY_INOUT_STORE.NEXTVAL from dual
		</selectKey>
		insert into SY_INOUT_STORE(INOUT_ID,INOUT_BATCHNO,INOUT_TYPE,TYPE,BASECODE,SELLER_NAME,SELLER_CPCCODE, BUYER_NAME,
		BUYER_CPCCODE, WEIGHT, STANDARD, PRODUCT_CODE, CREATE_TIME, REMARK, BUYER_TEL,BUYER_ADDRESS,INOUT_STORE_TIME,MANAGER,OPERATOR)
		VALUES (#{inoutId},#{inoutBatchno},#{inoutType},#{type},#{basecode},#{sellerName},#{sellerCpccode},#{buyerName},#{buyerCpccode},
		#{weight},#{standard},#{productCode},sysdate,#{remark},#{buyerTel},#{buyerAddress},#{inoutStoreTime},#{manager},#{operator})
	

给个实例的样子

2.插入多条数据时

//注意下面values里面的第一条语句“seq_sy_inout_code.nextval”,不用select关键字了,直接这样写就可以
	insert into SY_INOUT_CODE
    (INOUT_CODE_ID,CODE,INOUT_ID,CREATE_TIME)
    values
    <foreach collection="list" item="item" index="index" separator=",">
      (
      SEQ_SY_INOUT_CODE.nextval,
      #{item.code},
      #{item.inoutId},
      sysdate
      )
    </foreach>

3.插入多条数据时,II

//这就去掉了values关键字,相当于   --insert into sy_inout_code(j,j,j) select * from xxx-- 这个样子
  <insert id="insertRecordList" parameterType="java.util.List">
    insert into SYCLOUD.SY_INOUT_CODE (INOUT_CODE_ID, CODE, INOUT_ID, 
     		CREATE_TIME, UPDATE_TIME)
    select SYCLOUD.SEQ_SY_INOUT_CODE.nextval, A.* from (
    <foreach collection="list" item="item" index="index" separator="union all">
    select #{item.code,jdbcType=VARCHAR},
	      #{item.inoutId,jdbcType=DECIMAL},
	      #{item.createTime,jdbcType=TIMESTAMP},
	      #{item.updateTime,jdbcType=TIMESTAMP} from dual
    </foreach>
    ) A
  </insert>

在这里插入图片描述


版权声明:本文为qq_41361162原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。