關於iBatis selectKey的一點筆記

2022-09-17 01:15:13 字數 1309 閱讀 8236

技術前提:我們使用ibatis作為持久層方案 

技術場景: 

假設我們有兩張表,一張主表main,一張子表sub,並且主表的主鍵是由資料庫維護的自增長的主鍵,子表中有乙個字段引用這個主鍵,那麼當我們插入主表資料後,就需要馬上返回這個自增長的主鍵。 

解決方案: 

可以在insert時通過ibatis的selectkey返回那個主鍵。 

selectkey有3個主要的屬性: 

1)resultclass:返回的主鍵的資料型別,跟sqlmap中的資料型別一致; 

2)type:表示主鍵在insert之前或之後生成(取決於資料庫的主鍵生成策略),取值分別為[pre|post],非必須,未填寫時如果在insert之前表示pre,否則表示post; 

2)keyproperty:返回值儲存到的屬性,非必須(作用參見oracle配置); 

實際配置: 

select stockidsequence.nextval as id from dual 

]]>    

insert into product(prd_id,prd_description) values(#id#,#description#) 

]]>    

insert into product (prd_description) values(#description#) 

]]>    

select @@identity as id 

]]>  

上述ms sql server配置隨是官網提供的配置,但實際上卻恰恰隱患重重!按下述配置,確保獲得有效主鍵。 

insert into product (prd_description) values(#description#)  

select scope_identity() as id 

]]>  

insert into product(prd_description) values(#description#)    

select last_insert_id() as id 

insert into product(prd_description) values(#description#) 

values identity_val_local() 

insert into product(prd_description) values(#description#) 

select seq from sqlite_sequence where name = 'prd_description' 

通過以上方式,可以最大程度上確保插入資料的時候獲得當前自增主鍵。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...