mybatis插入記錄後獲得主鍵id
阿新 • • 發佈:2019-01-06
今天做練習的時候發現了mybatis的一個坑
在進行插入操作後,我們需要獲得新插入記錄的主鍵id,一般來說有兩種方法
<insert id="insertBlog" keyProperty="blogId" useGeneratedKeys="true" parameterType="com.*.Blog"> insert into s_blog (user_id, title, summary, content, draft_status, create_time, update_time) values(#{userId}, #{title}, #{summary}, #{content}, #{draftStatus}, current_timestamp, current_timestamp) </insert>
或者
第一種方法是利用jdbc的getGeneratedKeys方法,這種方式需要資料庫支援主鍵自增,如mysql<insert id="insertUser" parameterType="com.*.Blog"> <selectKey resultType="int" order="AFTER" keyProperty="userId"> select last_insert_id() as userId </selectKey> insert into user(email,password,activation_code,join_time,username,avatar_url) values(#{email},#{password},#{activationCode},#{joinTime},#{username},#{avatarUrl}) </insert>
像oracle這種不支援自增的可以使用第二種方式
那麼問題來了,在我每次獲得sql的返回值時得到的都是1,這個明顯就是這條sql所影響的行數,
後來我發現要取得主鍵,不是直接獲得sql的返回值,而是去實體類中取, 如blog.getBlogId().