mybatis中使用selectKey,返回結果一直是1


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();

嘴笨,有點啰嗦了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM