引言:
在開發中經常會遇見插入一條記錄並獲取主鍵的情況,Oracle和MySQL的獲取方式不一樣
正文:
Oracle中沒有主鍵自增這個選項,只能通過序列加觸發器來實現,之前有寫過-----Oracle實現主鍵自增
現在主鍵可以自增了,我們搭建一個ssm的框架進行開發,然後搭配Oracle的數據庫,某個需求需要獲取剛剛插入的記錄的主鍵,Oracle和MySQL的區別還是比較大的,所以獲取主鍵的方法也不一樣;
現在有一個表user,需要獲取它的ID並把ID寫入,已經設置了觸發器和序列,序列名:SEQ_USER(簡單,所以不上圖了),觸發器:
create or replace trigger TG_USER
before insert
on dvm_USER
for each row
declare
-- local variables here
begin
SELECT SEQ_USER.CURRVAL into :new.id from dual;
end TG_USER;
這裏要注意了,在begin裏面,我之前的文章寫的是:SELECT SEQ_USER.NEXTVAL into :new.id from dual;
這裏一定要注意,這兩個有很大的區別的,SEQ_USER.NEXTVAL是獲取序列的下一個,SEQ_USER.CURRVAL獲取的是當前會話的,詳細的我後面再寫一篇文章,這裏記住一定要用SEQ_USER.NEXTVAL先;
然後在mapper.xml中寫插入的sql
<insert id="insert" parameterType="com.test.model.User" >
<selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
SELECT SEQ_USER.NEXTVAL as ID from DUAL
</selectKey>
insert into DVM_USER
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
......
selectKey的用法許多博主都寫爛了,我就不說了,說的沒他們好,可以自行百度
在這裏要注意我用的是SEQ_USER.NEXTVAL,這樣寫了以後,mybatis會把查出來的數據放到入參的User中,所以下面的insert語句就可以取到了,然後我們在service中可以通過user.getId()來獲取這個插入語句的Id
寫於2018年9月6日
.:波♂