需求是這樣的:
mybatis中insert操作,返回自增id,因為這個自增id需要給后續業務用到。
原本是這樣的:
將insert語句傳入,正常執行insert操作,返回int永遠是 0[失敗] 或者 1[成功]
mapper.xml是這樣的:
<insert id="insertMaster" parameterType="java.lang.String" > ${masterInsertSql} </insert>
mapper.java是這樣的:
int insertMaster(@Param("masterInsertSql") String masterInsertSql);
想要實現mybatis的insert操作返回自增id,需要這樣:
1.首先,你需要一個Bean。
這個Bean對象作為參數傳入,這個bean需要一個字段接收自增id
所以,我得創建一個對象:
public class WorksheetMasterSQLBean { private Long id; private String masterInsertSql;
這個對象就多了一個id,用來接收自增id。
把原本的參數,放在這個對象中。
2.我需要將這個對象作為入參傳遞給mybatis
所以,我的mapper.java這樣寫:
int insertMaster(WorksheetMasterSQLBean masterBean);
3.最后,我需要指定我傳入的對象,哪個字段用來接收insert之后返回的自增id
所以,我的mapper.xml需要這樣寫:
<insert id="insertMaster" parameterType="com.lqjava.daywork.api.beans.WorksheetMasterSQLBean" useGeneratedKeys="true" keyProperty="id"> ${masterInsertSql} </insert>
添加屬性:
useGeneratedKeys="true"
keyProperty="id" //指定bean中的id字段接收 自增主鍵
就可以拿到insert操作后的自增主鍵了
4.最終要的,在java中調用時候,怎么拿到自增主鍵?
錯誤拿取:
int i = tableDataMapper.insertMaster(masterSQL); System.out.println("主鍵:"+i); //返回的依舊是 0 或者 1 ,代表執行成功或失敗
正確拿取:
tableDataMapper.insertMaster(masterSQL);
System.out.println("主鍵:"+masterSQL.getId()); //因為上面說了,mybatis會把自增id封裝在你的入參bean的指定字段中,所以應該從 入參.get(指定字段) 去獲取