1. 程式人生 > >mybatis 插入資料 返回ID

mybatis 插入資料 返回ID

插入一條語句 返回剛剛插入資料的ID
1. 支援 MySQL 和 sql server 資料庫

這是一般經常使用的 插入語句

 <insert id="insertUser" parameterType="com.shr.model.User" >
        insert into user (name,sex,age,idCard) 
        values (#{name},#{sex},#{age},#{idCard})
    </insert>

返回 最新的ID , 在標籤上新增這兩個引數 useGeneratedKeys=”true” keyProperty=”id”

    <insert id="insertUser" parameterType="com.shr.model.User" useGeneratedKeys="true" keyProperty="id">
        insert into user (name,sex,age,idCard) 
        values (#{name},#{sex},#{age},#{idCard})
    </insert>

還有一種,下面這種會訪問兩次資料庫 執行兩條sql 所以建議使用上面的方法。

<!-- 新增 crimer -->
    <insert
id="insertUser" parameterType="com.shr.model.User">
<!-- 返回最新ID 不推薦使用 依賴於資料庫 需要查詢 --> <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> select @@IDENTITY as id </selectKey> insert into user(name,sex,age,idCard) values (#{name},#{sex},#{age},#{idCard}) </insert
>

2.支援 Oracle 資料庫的方式

<insert id="insertUser" parameterType="com.shr.model.User">
    <selectKey keyProperty="id" resultType="_long" order="BEFORE">
       select CAST(RANDOM * 100000 as INTEGER) a FROM SYSTEM.SYSDUMMY1
    </selectKey>

    insert into user(name,sex,age,idCard) 
    values (#{name},#{sex},#{age},#{idCard})
</insert>

3.還有一些insert標籤屬性
parameterType ,入參的全限定類名或類型別名

keyColumn ,設定資料表自動生成的主鍵名。對特定資料庫(如PostgreSQL),若自動生成的主鍵不是第一個欄位則必須設定

keyProperty ,預設值unset,用於設定getGeneratedKeys方法或selectKey子元素返回值將賦值到領域模型的哪個屬性中

useGeneratedKeys ,取值範圍true|false(預設值),設定是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設定的領域模型屬性中。MySQL和SQLServer執行auto-generated key field,因此當資料庫設定好自增長主鍵後,可通過JDBC的getGeneratedKeys方法獲取。但像Oralce等不支援auto-generated key field的資料庫就不能用這種方法獲取主鍵了

statementType ,取值範圍STATEMENT,PREPARED(預設值),CALLABLE

flushCache ,取值範圍true(預設值)|false,設定執行該操作後是否會清空二級快取和本地快取

timeout ,預設為unset(依賴jdbc驅動器的設定),設定執行該操作的最大時限,超時將拋異常

databaseId ,取值範圍oracle|mysql等,表示資料庫廠家,元素內部可通過<if test="_databaseId = 'oracle'">來為特定資料庫指定不同的sql語句
借鑑於前輩總結的知識