我們有個功能大意是這樣的:
有個實體,對應的表中有個id 列是從 sequence 裡取值的,本地頁面操作導致資料的插入就從 sequence 取值賦給 id。如果是第三方通過 rest 操作本應用資源導致的資料插入(此時的資料的id列是有值的,但是能夠保證絕不會和本地的 id 值重複。),介面應當也要滿足。即需要持久層對應用透明。
我們使用的是 mybatis 做 orm 的,所以 insert 語句使用了 ,寫法如下:
select advanced_variable_seq.nextval from dual
我們就在 selectkey 塊裡面加上判斷,如果 id 有值,就直接使用,不從 sequence 裡拿。
select advanced_variable_seq.nextval from dual
select # from dual
insert into advanced_variable (id, advanced_analysis_id, var_name,
var_type, query, note)
values (#, #, #,
#, #, #)
這個對單個的 insert 語句是管用的。但是對於 batchinsert 語句,其寫法和原理如
mybatis使用foreach批次插入,解決sequence只查詢一次的問題 所說,我們無法在 塊外獲得當前的 id 列值。帶有 sequence 的 batchinsert 的簡單寫法如下也是一樣。
insert into cohort_variable
select cohort_var_sequence.nextval, a.* from (
select
#,#,
#,#,
#from dual
) a
有個解決辦法,就是在業務層判斷一下list 裡面的物件的 id 是否有值,沒有就使用 sequence 插入,否則就用普通的 batchinsert 語句。
Mybatis 批量插入 返回自增Id
2月18日,mybatis3.3.1解決了此問題。好開心,省了多餘的查詢了。自己測試了一下。例子表 create table user id intnot null auto increment,name varchar 16 null comment 名稱 primary key id pom 依...
mybatis註解獲取插入的自增主鍵id
insert address selectkey statement select last insert id keyproperty userauthenticationrequestv3.cerid before false resulttype int.class 下面介紹乙個重要註解 se...
新建標識列,id自增
乙個表中可以不設定主鍵,如果設定主鍵,則主鍵唯一且主鍵列不得有空值。標識列,是sql server中的標識列又稱識別符號列,習慣上又叫自增列。1 建立表時指定標識列 標識列可用 identity 屬性建立,因此在sql server中,又稱標識列為具有identity屬性的列或identity列。下...