mybatis插入數據獲取Oracle主鍵

引言:

在開發中經常會遇見插入一條記錄並獲取主鍵的情況,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日

                                                                                                                                                                     .:波♂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章