MyBatis中Mapper的返回值類型

一、insert、update、delete語句的返回值類型

對數據庫執行修改操作時,數據庫會返回受影響的行數。

在MyBatis(使用版本3.4.6,早期版本不支持)中insert、update、delete語句的返回值可以是Integer、Long和Boolean。在定義Mapper接口時直接指定需要的類型即可,無需在對應的<insert><update><delete>標籤中顯示聲明。

對應的代碼在 org.apache.ibatis.binding.MapperMethod 類中,如下:

  • 對於insert、update、delete語句,MyBatis都會使用 rowCountResult 方法對返回值進行轉換;
  • rowCountResult 方法會根據Mapper聲明中方法的返回值類型來對參數進行轉換;
  • 對於返回類型爲Boolean的情況,如果返回的值大於0,則返回True,否則返回False

二、select語句的返回值類型

對於select語句,必須在Mapper映射文件中顯示聲明返回值類型,否則會拋出異常,指出“A query was run and no Result Maps were found for the Mapped Statement”。

  • 返回Integer或Long類型
    • 與修改語句不同,select語句必須指定返回值類型,且mapper映射文件中的返回值類型需要與mapper接口中聲明的返回值類型一致,都是int或long;
    • mapper接口中的返回值類型可以是Integer、Long,也可以是int、long
  • 不能返回Boolean類型

   select語句不能返回Boolean類型

  • 返回自定義類型的Bean

  select語句返回的column值與Mapper方法返回值的屬性的映射有兩種方式(具體設置見下文):

    • 通過名稱實現自動映射
    • 通過resultMap標籤指定映射方式
  • 返回List、Set、Array類型

   直接指定select方法的返回值爲List<T>、Set<T>、即可,注意此時mapper映射文件中select標籤的 resultType類型一定要是自定義的Bean類型,而不是集合類型,可以理解爲resultType指定的類型對應的是數據庫中的一行數據

  • 返回Map類型

   返回Map類型有兩種含義:

    • resultType的類型爲map,mapper接口的返回值也爲Map,此時返回結果將Bean的屬性作爲key,值作爲Value返回
    • resultType的類型爲非map類型(自定義類型、數值類型、String等),mapper接口的返回值爲Map,且指定了mapKey,此時的返回結果以指定的mapKey作爲Key,以resultType類型對象作爲value
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章