spring+mybatis useGeneratedKeys返回主鍵

在數據庫操作中,當我們插入數據時往往需要當前插入數據的主鍵id,初學時比較笨,在插入之後再做一遍查詢來獲取id,這樣會出現很多的問題。其實java提供了useGeneratedKeys方法,可以直接返回id,直接上代碼:

正常插入語句是這樣的

 

<insert id="addTeacher" parameterType="com.kk.demo.bean.Teacher">
       insert into teacher(tsex,tbirth) values(#{tsex},#{tbirth})
 </insert>

使用MySql和SQL server,我們只需要返回id時只需要加入useGeneratedKeys 和keyProperty即可,因爲這兩個數據庫支持auto-generated key field(即自增主鍵)

 

<insert id="addTeacher" useGeneratedKeys="true" keyProperty="tid" parameterType="com.kk.demo.bean.Teacher">
      insert into teacher(tsex,tbirth) values(#{tsex},#{tbirth})
</insert> 

useGeneratedKeys:設置是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設置的領域模型屬性中。MySql和SQLServer執行auto-generated key field,因此當數據庫設置好自增長主鍵後,可通過JDBC的getGeneratedKeys方法獲取。但像Oralce等不支持auto-generated key field的數據庫就不能用這種方法獲取主鍵了

keyProperty:用於設置getGeneratedKeys方法或selectKey子元素返回值將賦值到領域模型的哪個屬性中,tid 是表中的自增主鍵

 

問題:getId返回值爲空

問題代碼:

 

 //DAO
 long add(@Param("item") Item item);

//mapper.xml
<insert id="add" useGeneratedKeys="true" keyProperty="itemId">
    insert into item(item_price,item_sales) VALUES (#{itemPrice},#{itemSales})
</insert>

使用useGeneratedKeys生成主鍵時,不能在DAO層使用@Param註解傳遞參數,否則無法獲取主鍵

注意:不使用@Param註解時,參數只能有一個,並且是Javabean。在SQL語句裏可以引用JavaBean的屬性,而且只能引用JavaBean的屬性。

正確代碼:

//DAO
long add(Item item);

//mapper.xml
<insert id="add" useGeneratedKeys="true" keyProperty="itemId" parameterType="com.kk.springboot.bean.Item">
    insert into item(item_price,item_sales) VALUES (#{itemPrice},#{itemSales})
</insert>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章