最近做項目,遇到一個邏輯,就是在修改單條記錄時需要返回該記錄的id。
先說一下我的使用環境,springMVC+MyBatis,於是上度娘查了一下,將結果記錄一下,僅供日後參考和大家們共同探討
具體邏輯就是在多個條件下,包括一個嵌套查詢,對一條記錄進行更新,並返回該記錄的主鍵id,在這個查詢語句裡面用到一個變量update_id在執行更新語句的時候將本記錄的id重新賦值為自身的id,同時將自身的id賦值給updatge_id這個變量,最後返回這個變量,就是這個更新最後的目的。
SET @update_id := 0; UPDATE activity_prize_voucher apv SET apv.mobile = 18888888888, apv.state = 1, apv.exchange_time = NOW(), apv.id =(SELECT @update_id := id) WHERE apv.prize_id = 2 AND apv.state = 0 AND mobile IS NULL AND exchange_time IS NULL <span style="color:#ff0000;">AND( SELECT vv.exchangeCount <= 2000 FROM ( SELECT COUNT(*)AS exchangeCount FROM activity_prize_voucher apvv WHERE apvv.prize_id = 2 AND apvv.state = 1 AND DATE_FORMAT(NOW(), '%Y%m%d')= DATE_FORMAT( apvv.exchange_time, '%Y%m%d' ) )AS vv )</span> LIMIT 1; SELECT @update_id;
在 Mapper.xml內的標簽使用為select標簽
<select id="exchangeVoucher" parameterType="hashmap" resultType="java.lang.Integer"> SQL </select>
在java Dao內方法為:
int exchangeVoucher(Map<String, Object> queryParams);