Mapper中insert 順便返回主鍵
阿新 • • 發佈:2019-02-18
轉自:https://www.cnblogs.com/xingyunblog/p/6243179.html
類似下面這段程式碼一樣獲取插入後的主鍵
User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("測試插入資料返回主鍵功能"); System.out.println("插入前主鍵為:"+user.getUserId()); userDao.insertAndGetId(user);//插入操作 System.out.println("插入後主鍵為:"+user.getUserId());
經過查詢網上資料,發現大致有兩種方式。
方式一:
在實體類的對映檔案 "*Mapper.xml" 這樣寫:
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into user(userName,password,comment) values(#{userName},#{password},#{comment}) </insert>
Tips:
useGeneratedKeys="true" 表示給主鍵設定自增長
keyProperty="userId" 表示將自增長後的Id賦值給實體類中的userId欄位。
parameterType="com.chenzhou.mybatis.User" 這個屬性指向傳遞的引數實體類
這裡提醒下,<insert></insert> 中沒有resultType屬性,不要亂加。
實體類中uerId 要有getter() and setter(); 方法
由於我在MySQL資料庫中建表時候已經設定了欄位自增長,故最終我選擇了第二種方式。
第二種方式:
同樣在實體類的對映檔案 "*Mapper.xml" 但是要這樣寫:
<!-- 插入一個商品 --><insert id="insertProduct" parameterType="domain.model.ProductBean" > <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="productId"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO t_product(productName,productDesrcible,merchantId)values(#{productName},#{productDesrcible},#{merchantId}); </insert>
Tips:
<insert></insert> 中沒有resultType屬性,但是<selectKey></selectKey> 標籤是有的。
order="AFTER" 表示先執行插入語句,之後再執行查詢語句。
可被設定為 BEFORE 或 AFTER。
如果設定為 BEFORE,那麼它會首先選擇主鍵,設定 keyProperty 然後執行插入語句。
如果設定為 AFTER,那麼先執行插入語句,然後是 selectKey 元素-這和如 Oracle 資料庫相似,可以在插入語句中嵌入序列呼叫
keyProperty="userId" 表示將自增長後的Id賦值給實體類中的userId欄位。
SELECT LAST_INSERT_ID() 表示MySQL語法中查詢出剛剛插入的記錄自增長Id.
實體類中uerId 要有getter() and setter(); 方法