使用resultType進行輸出映射,隻有查詢出來的列名和pojo中的屬性名一緻,該列才可以映射成功。
如果查詢出來的列名和pojo的屬性名不一緻,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關系。
resultMap:适合使用傳回值是自定義實體類的情況
resultType:适合使用傳回值得資料類型是非自定義的,即jdk的提供的類型
關聯查詢(一對多):resultMap的處理方式為在訂單表資料的pojo中添加一個list,list中為訂單明細表的屬性,在mapper.xml中采用如下的處理方式:
<resultMap type="com.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
<!-- 訂單資訊 -->
<!-- 使用者資訊 -->
<!-- 使用extends繼承,不用在中配置訂單資訊和使用者資訊的映射 -->
<!-- 訂單明細資訊
一個訂單關聯查詢出了多條明細,要使用collection進行映射
collection:對關聯查詢到多條記錄映射到集合對象中
property:将關聯查詢到多條記錄映射到com.mybatis.po.Orders哪個屬性
ofType:指定映射到list集合屬性中pojo的類型
-->
<collection property="orderdetails" ofType="com.mybatis.po.Orderdetail">
<!-- id:訂單明細唯 一辨別
property:要将訂單明細的唯 一辨別 映射到com.mybatis.mybatis.po.Orderdetail的哪個屬性
-->
<id column="orderdetail_id" property="id"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
<result column="orders_id" property="ordersId"/>
</collection>
</resultMap>
在MyBatis進行查詢映射時,其實查詢出來的每一個屬性都是放在一個對應的Map裡面的,其中鍵是列名,值則是其對應的值。
當提供的傳回類型屬性是resultType時,MyBatis會将Map裡面的鍵值對取出賦給resultType所指定的對象對應的屬性。
是以其實MyBatis的每一個查詢映射的傳回類型都是ResultMap,隻是當提供的傳回類型屬性是resultType的時候,MyBatis會自動把對應的值賦給resultType所指定對象的屬性。
mybatis 中 mapUnderscoreToCamelCase自動駝峰命名轉換
SSM 項目中在mybatis配置檔案中添加以下配置,可以将資料庫中 user_name轉化成 userName 與實體類屬性對應, 如果資料庫使用如 user_name 的命名方式,實體類采用駝峰命名。配置後無需寫resultMapper将資料庫字段和實體類屬性對應
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
在spring boot項目中沒有mybatis.xml檔案,配置檔案application.properties中,加入配置項:
mybatis.configuration.mapUnderscoreToCamelCase=true