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語句
借鑑於前輩總結的知識