天天看點

MyBatis 中 ResultType 和 ResultMap 的差別 & mybatis 中 mapUnderscoreToCamelCase自動駝峰命名轉換

使用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