mybatis中使用selectKey,返回結果一直是1,結合這個問題,筆記一下selectKey標簽以及問題的原因
先說需求,向數據庫插入一條記錄,表的id是自增的,插入以后返回插入記錄的id
下面是xml文件中的插入的sql
1 <insert id="insertCompete" parameterType="CompetesWithBLOBs"> 2 insert into competes(compete_title,compete_about,compete_integral,issue_date) 3 values(#{competeTitle},#{competeAbout},#{competeIntegral},#{issueDate}) 4 5 <selectKey keyColumn="compete_id" keyProperty="competeId" order="AFTER" 6 resultType="int"> 7 select last_insert_id() 8 </selectKey> 9 </insert>
上面插入的內容就不說了,直接說<selectKey>
keyColumn:插入數據以后,要返回的內容在數據表中對應的字段名稱(這里返回的是插入記錄的id(對應數據表中的名稱為compete_id))
keyProperty:指定返回的id映射到bean中的哪個屬性(這里是competeId),這個bean對應的類的名稱就是上面insert標簽中的屬性parameterType的值,
order=”AFTER”:表示這個selectKey語句的執行是在insert語句之后
resultType:selectKey語句返回值的類型,我這里是int類型
下面說一下為什么執行這個sql后,一直返回1,而不是我們期望的id,先看一下調用代碼
1 Integer result = competesMapperCustom.insertCompete(compete); 2 Integer competeId = compete.getCompeteId();
我插入數據時插入的是一個bean,這個bean的類型就是上面我們提到的parameterType的值,插入前它的id是空,
當我們執行插入后,返回插入的結果result,插入成功result=1,插入失敗result=0,這就是為什么結果一直為1了,因為返回的結果根本不是我們需要的id,返回的id其實已經映射到了我們插入的bean中,我們只要通過它的get方法就可以得到了:compete.getCompeteId();
嘴笨,有點啰嗦了!