天天看點

MyBatis 3.3.1 版本新功能示例 MyBatis 3.3.1版本新功能示例

mybatis3.3.1更新日志: 

https://github.com/mybatis/mybatis-3/issues?q=milestone%3a3.3.1

這裡不對更新做翻譯或者其他詳細介紹。 

這個更新除了一些bug修複,還有兩個新增的功能:

增加了對批量插入回寫自增主鍵的功能

增加了注解引用<code>@results</code>的功能

下面通過簡單例子來介紹這兩個功能,為了例子的簡潔,這裡都使用注解實作的,沒有用xml,批量插入的例子很容易就能變成xml形式的,大家自己嘗試。

city表:

city對象:

這裡詳細說一下這兩個新功能的用法。

首先接口參數隻能有一個(預設情況下),如果你參數有多個,那麼要傳回主鍵的那個<code>list</code>必須加注解<code>@param("list")</code>或者在參數<code>map</code>中對應的<code>key</code>為<code>"list"</code>。這一點很重要,隻有看源碼才能了解(當然除了<code>"list"</code>還有另外的名字,例如支援數組的<code>"array"</code>),參考<code>jdbc3keygenerator</code>類中的這段代碼:

然後就是必須使用<code>usegeneratedkeys</code>的方式,注解使用下面的方式:

xml使用類似下面的方式:

隻要注意上面這幾點,批量插入應該就能傳回自增的值了。

注意:大家應該能了解,自增的不一定是主鍵,而且一個表中可能有多個自增的值。這些情況下都能擷取到,<code>keyproperty</code>需要設定多個屬性值,逗号隔開即可。

</h2>

(此功能是否為新增功能,我并不确定,因為我平時不用注解)

用mybatis的人中,使用注解的是少數,但是有些企業由于上司或者别的原因,會限制必須用注解。

這對一些複雜的情況來說,使用起來不如xml的友善,但是不得不用。

以前如果傳回一個對象的屬性需要配置映射,那麼每個對象上都需要這段重複的代碼,看起來很亂很麻煩。

在上面的例子中,在<code>selectbycityid</code>上定義了<code>results</code>,在下面的方法<code>selectall</code>上通過<code>@resultmap("cityresult")</code>直接引用的上面的<code>results</code>。這個功能在使用的時候沒有特别注意的地方。

寫個簡單的測試,代碼如下:

第一個測試方法輸出的部分日志如下:

後兩個方法輸出的部分日志如下:

注:由于批量插入事務并沒有送出,是以這裡查詢出來的結果就是表中原有的兩條資料。

為了友善嘗試上面的代碼,可以直接檢視下面項目的<code>src/test</code>:

mybatis-spring-boot: https://github.com/abel533/mybatis-spring-boot

另外mybatis-spring項目也同時更新到了<code>1.2.4</code>,這個版本對于使用springboot的開發人員非常有用,這個版本解決了mybatis的循環依賴異常,如果你在使用springboot,趕緊更新到最新的版本試試吧。