MyBatis插入並獲取自增主鍵
在MyBatis中,經常會使用到自增主鍵,但是在一個方法體內插入后如何獲取自增后的主鍵呢?
我們知道insert和insertSelective兩個方法都會有一個Integer類型返回值,它是不是我們要的自增主鍵呢?答案是:當然不是!
MyBatis當然知道我們的這個需求,也提供了對應的解決方案,而且是兩種。接下來我們一起看看吧
方案1:在插入后查詢最后一條數據的id
在插入元素后我們查詢一下最后一條數據的id,不就可以拿到這個對象的id了嗎
<insert id="insertSelective" parameterType="cn.rayfoo.dao.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">
name,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
</trim>
</insert>
方案2:在insert標簽上加上如下屬性
-
設置useGeneratedKeys為true
-
指定keyProperty為主鍵的字段名稱
<insert id="insertSelective" parameterType="cn.rayfoo.dao.User" useGeneratedKeys="true" keyProperty="id">
</insert>
注意:
- 通過這兩種方式獲取的主鍵,不是通過返回值的形式返回,而是直接賦值給insertSelective操作的那個bean對象。
- 如果標簽中插入了多條數據,那么拿到的id將會是最后一條,也就是說這個方法不適用於批量插入的insert語句。