zoukankan      html  css  js  c++  java
  • select last_insert_id()使用注意(一)

    记录是为了更好的成长!  

      在程序中遇到了一个很奇怪的问题,通过程序向库中插入数据已经成功,却拿不到select last_insert_id()生成的值,一直都是0;经过查资料,才明白insert into 语句要和 select last_insert_id() 在同一个Connection对象中才能返回正确的主键ID,否则返回别的值;于是就将insert into 和 select last_insert_id()写在同一个方法中;

    代码如下:

      在逆向mabatis中的使用如下:
      在自动生成的mapper.xml中添加selectKey标签里的内容,增加返回的值就是当前记录的主键
    <insert id="insert" parameterType="com.pingyougou.pojo.TbSpecification" >
        <selectKey resultType="java.lang.Long" order="ALTER" keyProperty="id">
            select last_insert_id() as id    
        </selectKey>
        insert into tb_specification (id, spec_name)
        values (#{id,jdbcType=BIGINT}, #{specName,jdbcType=VARCHAR})
    </insert>

     顺便看看selectkey中各个属性的定义:

    resultType:结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。

    order:这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。像Oracle这样取序列的情况,需要设置为before,否则会报错。

    keyProperty:selectKey 语句结果应该被设置的目标属性。

    以上内容代表个人观点,仅供参考,不喜勿喷。。。

  • 相关阅读:
    erlang调试技术之etop
    erlang进程与操作系统线程
    BFS算法入门--POJ3984
    Linux学习笔记(2)Linux学习注意事项
    Linux学习笔记(1)Linux虚拟机安装过程中的知识点及常用管理工具
    题解 UVA10587 【Mayor's posters】
    【BZOJ4590】自动刷题机
    【Usaco2006Mar】Milk Team Select产奶比赛
    【区间DP】释放囚犯
    ssm项目中KindEditor的图片上传插件,浏览器兼容性问题
  • 原文地址:https://www.cnblogs.com/newbest/p/9126881.html
Copyright © 2011-2022 走看看