MyBatis通過MappedStatement描述<select|update|insert|delete>或者@Select、@Update等註解配置的SQL信息。在介紹MappedStatement組件之前,我們先來了解一下MyBatis中SQL Mapper的配置。不同類型的SQL語句需要使用對應的XML標籤進行配置。這些標籤提供了很多屬性,用來控制每條SQL語句的執行行爲。下面是<select>標籤中的所有屬性:
- id:在命名空間中唯一的標識符,可以被用來引用這條配置信息。
- parameterType:用於指定這條語句的參數類的完全限定名或別名。這個屬性是可選的,MyBatis能夠根據Mapper接口方法中的參數類型推斷出傳入語句的類型。
- parameterMap:引用通過<parameterMap>標籤定義的參數映射,該屬性已經廢棄。
- resultType:從這條語句中返回的期望類型的類的完全限定名或別名。注意,如果返回結果是集合類型,則resultType屬性應該指定集合中可以包含的類型,而不是集合本身。
- resultMap:用於引用通過<resultMap>標籤配置的實體屬性與數據庫字段之間建立的結果集的映射(注意:resultMap和resultType屬性不能同時使用)。
- flushCache:用於控制是否刷新緩存。如果將其設置爲true,則任何時候只要語句被調用,都會導致本地緩存和二級緩存被清空,默認值爲false。
- useCache:是否使用二級緩存。如果將其設置爲true,則會導致本條語句的結果被緩存在MyBatis的二級緩存中,對應<select>標籤,該屬性的默認值爲true。
- timeout:驅動程序等待數據庫返回請求結果的秒數,超時將會拋出異常。
- fetchSize:用於設置JDBC中Statement對象的fetchSize屬性,該屬性用於指定SQL執行後返回的最大行數。
- statementType:參數可選值爲STATEMENT、PREPARED或CALLABLE,這會讓MyBatis分別使用Statement、PreparedStatement或CallableStatement與數據庫交互,默認值爲PREPARED。
- resultSetType:參數可選值爲FORWARD_ONLY、SCROLL_SENSITIVE或SCROLL_INSENSITIVE,用於設置ResultSet對象的特徵,具體可參考第2章JDBC規範的相關內容。默認未設置,由JDBC驅動決定。
- databaseId:如果配置了databaseIdProvider,MyBatis會加載所有不帶databaseId或匹配當前databaseId的語句。
- resultOrdered:這個設置僅針對嵌套結果select語句適用,如果爲true,就是假定嵌套結果包含在一起或分組在一起,這樣的話,當返回一個主結果行的時候,就不會發生對前面結果集引用的情況。這就使得在獲取嵌套結果集的時候不至於導致內存不夠用,默認值爲false。
- resultSets:這個設置僅對多結果集的情況適用,它將列出語句執行後返回的結果集並每個結果集給一個名稱,名稱使用逗號分隔。
- lang:該屬性用於指定LanguageDriver實現,MyBatis中的LanguageDriver用於解析<select|update|insert|delete>標籤中的SQL語句,生成SqlSource對象。