MyBatis+Oracle實現主鍵自增長的幾種常用方式
阿新 • • 發佈:2019-01-22
在最近做專案中,SSM框架+Oracle資料庫,遇到前臺沒有傳遞主鍵值,需要在插入資料的時候實現主鍵自增長,因為oracle沒有如同SqlServer和mysql一樣的主鍵自增長的設計,所以只能迂迴實現,先將我的實現方法記錄如下:
一、使用selectKey標籤
keyProperty是指vo類中的主鍵屬性名稱,resultType是指vo類中的主鍵屬性型別,order有兩個屬性,一個是AFTER是指限制性插入語句,一個是BEFORE是指先執行selectKey標籤內的語句:select nvl(max(主鍵名),0)+1 from 表名<insert id="addLoginLog" parameterType="map" > <selectKey keyProperty="id" resultType="int" order="BEFORE"> select nvl(max(id),0)+1 from ap_loginlog </selectKey> insert into ap_loginlog(ID,MEMBER_ID) values(#{id},#{memberId}) </insert>
二、使用序列
首先建立序列
CREATE SEQUENCE loginlog_squence
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
CACHE 10;
然後再sql語句中插入三、使用序列加觸發器<insert id="addLoginLog" parameterType="map" > insert into ap_loginlog(ID,MEMBER_ID) values(loginlog_squence.nextval,#{memberId}) </insert>
create or replace trigger loginlog_trigger before insert on ap_loginlog
for each row
begin
select loginlog_sequence.nextval into :new.id from dual;
end loginlog_trigger;
/
然後再sql語句中插入<insert id="addLoginLog" parameterType="map" > insert into ap_loginlog(MEMBER_ID) values(#{memberId}) </insert>
以上三種方式是我覺得比較常用的,或許也有別的方法,可是我不是很清楚,希望大家也給我提提意見,讓我也豐富一下這一方面的知識,在以後的工作中能夠多一種選擇。這三種方法可以適應很多場合,這個就需要按照實際需求去選擇其中一個方法。