1. 程式人生 > >MyBatis:@Insert、@Delete、@Update、@Select的value輸入SQL陣列時如何處理

MyBatis:@Insert、@Delete、@Update、@Select的value輸入SQL陣列時如何處理

當使用MyBatis的@Insert、@Delete、@Update、@Select時,我發現它們的value屬性都是陣列,例如:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select {
  String[] value();
}

一般情況,都是直接傳入一條SQL作為引數,對於陣列的處理,網上搜不到答案,這個問題放在備忘錄很久了,最近閒來無事就測試了一下。

四個註解都輸入SQL陣列作為引數,通過檢視控制檯SQL和執行結果觀察有何不同。

經過測試,四個註解都會將引數中的SQL陣列直接拼接執行,因此每個SQL都必須以;結尾,否則兩個SQL拼接後,之間缺少;分隔會導致執行失敗。對於@Select註解,會將第一個SQL的執行結果返回。

由於原始碼中沒有註釋,這種SQL陣列的設計思路,個人猜測,這樣的設計思路可能是為了實現程式碼層面的SQL觸發器。