美文网首页
MyBatis实现Oracle的批量添加(ID自增长)

MyBatis实现Oracle的批量添加(ID自增长)

作者: 卷毛程序员 | 来源:发表于2018-04-26 21:56 被阅读0次

    简单明了直接贴代码再解释

    ID自增长待会儿再讲

    <insert id="insertByList" parameterType="java.util.List">
    insert into NAME_LIST (ID,USERNAME,PASSWORD)

    SELECT SEQ_NAME_LIST_ID.nextval as ID,a.* from(
    <foreach collection="list" item="item" index="index" separator="UNION ALL">
      SELECT
      #{item.username,jdbcType=VARCHAR},
      #{item.password,jdbcType=VARCHAR},
      FROM dual
    </foreach>)a
    

    </insert>
    这里的格式问题就暂且不改了,首先有的人可能会用以下的代码


    QQ图片20180426214116.png

    这个代码你会发现插入一条正常,但是几条的list就炸了,因为Oracle里没有insert....value这样,只有select...from dual

    接下来分析一下代码:

    首先要注意parameterType的属性是List或者Map随你自己,其次要注意在select中的sequence后面加上 a.(当然取什么名字都行,不加这个只有一个id,别忘了最后也要加)。item这个项相当于List的属性,所以在后面属性前要加上item.
    最后要注意下面的value中不要加id,因为前面有了。

    最后讲讲Sequense(我也现学的)

    CREATE SEQUENCE SEQ_MERCHANT_AUDIT
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXVALUE -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    NOCACHE;
    这就是创建,在Oracle中执行就好

    SELECT SEQ_MERCHANT_AUDIT.nextval from dual
    1、dual : 是oracle的虚拟表,不是真实存在的.
    2、SEQ_MERCHANT_AUDIT : 这个是开发人员自己起的一个"序列"的名字,序列一般用于生成id号.
    3、SEQ_MERCHANT_AUDIT.nextval 就是取序列的下一个值

    关于自增长,前面两个例子应该足够了,单个或者批量都可以实现了

    相关文章

      网友评论

          本文标题:MyBatis实现Oracle的批量添加(ID自增长)

          本文链接:https://www.haomeiwen.com/subject/gkimlftx.html