zoukankan      html  css  js  c++  java
  • MyBatis下在插入数据时获得MySQL自增长序列的值

    在写代码的时候经常会碰到这样一种情况,就是有个A表的主键是mysql自动递增的序列,而这个A表的主键又是B表的外键。有时候会在同一个方法事务里先插入A表,然后插入B表,但是这时后在程序中还无法获得这个A表的自动递增的序列主键,导致插入B表的时候外键插入为空或报错。这种情况可以通过在MyBatis中配置selectKey 为mysql的LAST_INSERT_ID()函数获得插入时的自增序列值来获得。
    配置如下:
    <insert id="insertBook" parameterType="com.doit8.ishare.modules.ishareread.pojo.Book" >
    <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="bookId">
    SELECT LAST_INSERT_ID() AS bookId
    </selectKey>
    INSERT INTO ishare_book(
    book_name,
    book_author,
    book_press,
    book_pressdate,
    book_isbn,
    book_content_desc,
    book_author_desc,
    book_catalog,
    book_image
    ) VALUES (
    #{bookName},
    #{bookAuthor},
    #{bookPress},
    #{bookPressdate},
    #{bookIsbn},
    #{bookContentDesc},
    #{bookAuthorDesc},
    #{bookCatalog},
    #{bookImage}
    </insert>
    其中 SELECT LAST_INSERT_ID() AS bookId 通过mybaits的ORM映射到Book类的bookId的属性对应到的是表中book_id的自动递增的主键序列字段,这样就可以通过book对象的bookId属性获得这个值了。

    可以看到在对象插入之前bookId的值为null,插入之后bookId就有值了


  • 相关阅读:
    导入数据库的命令
    截取字符串
    用decode函数实现行变列
    初始库存入库相关知识
    客户欠款余额账
    存货管理
    创建临时表(转)
    求余额
    学习浪潮系统
    oracle number类型
  • 原文地址:https://www.cnblogs.com/xiejava/p/15171440.html
Copyright © 2011-2022 走看看