天天看點

MyBatis insert 傳回自增主鍵

需求:插入資料庫的資料成功後傳回其主鍵。

條件1,資料庫必須支援自增主鍵,例如MySql等,Oracle這種不支援自增主鍵的不可以。

條件2,目标主鍵必須自增,UUID是不支援的。

實作方式:

1.mybatis 的insert(或者insertSelective,以逆向工程mapper代碼為例)标簽要這樣寫

<insert id="insertSelective" parameterType="com.demo.UserData" useGeneratedKeys="true" keyProperty="id">
           

插入後就可以擷取被插入資料的主鍵了。

但是,這個主鍵不知直接傳回的,直接傳回的永遠都是操作影響的記錄數,這個主鍵是直接傳回到被插入對象裡的。

java代碼中的insert代碼為

mapper.insertSelective(userData);
           

那麼,執行完上面的代碼後,就可以通過userData.getId()擷取到傳回的自增主鍵了。

其他方式:

還可以通過mapper.xml中添加

<insert id="insertSelective" parameterType="com.demo.UserData">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into user_data (xxx,xxx,xxx,xxx) values (省略)
</insert>
           

來實作同樣功能,

更簡單的方式是,直接在使用逆向工程的時候

<generatorConfiguration>
    <context>
        <table tableName="user_data"
               domainObjectName="UserData">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
           

逆向後,直接生成上面的mapper.xml映射代碼