myBatis-- 字段名與實體類屬性名衝突解決辦法

1、建立訂單表sql

order_id         order_name          order_price數據庫

1                        蘋果                      6.5app

2                        香蕉                        3dom

3.                       桔子                         2spa

2、定義實體類code

public Orderxml

{對象

    private Integer id;get

    private String name;class

    private float price;

}

3、xml文件代碼

查不到數據xml以下

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根據id查詢獲得一個order對象,使用這個查詢是查詢不到咱們想要的結果的,
         由於實體類的屬性名和數據庫的字段名對應不上的緣由,所以沒法查詢出對應的記錄
     -->
    <select id="getOrderById" parameterType="int" resultType="me.gacl.domain.Order">
            select * from orders where order_id=#{id}
    </select>        
    
</mapper>

解決方法以下,方法一

直接將 返回的數據庫字段名與實體類的屬性名 設置成同樣,返回類型(resultType)直接設置成接收的實體類名.

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根據id查詢獲得一個order對象,使用這個查詢是能夠正常查詢到咱們想要的結果的,
         這是由於咱們將查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的字段名就能夠一一對應上
     -->
    <select id="selectOrder" parameterType="int" resultType="me.gacl.domain.Order">
            select order_id id, order_name name,order_price price from orders where order_id=#{id}
    </select>        
    
</mapper>

方法二

注意,這裏使用了resultMap轉換了一下,因此要將resultType改成resultMap。

<mapper namespace="me.gacl.mapping.orderMapper">
     
     <!--
         根據id查詢獲得一個order對象,使用這個查詢是能夠正常查詢到咱們想要的結果的,
         由於咱們經過<resultMap>映射實體類屬性名和表的字段名一一對應關係
     -->
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
             select * from orders where order_id=#{id}
    </select>
    
    <!--經過<resultMap>映射實體類屬性名和表的字段名對應關係 -->
    <resultMap type="me.gacl.domain.Order" id="orderResultMap">
        <!-- 用id屬性來映射主鍵字段 -->
        <id property="id" column="order_id"/>
        <!-- 用result屬性來映射非主鍵字段 -->
        <result property="name" column="order_name"/>
        <result property="price" column="order_price"/>
    </resultMap>        
</mapper>

總結:

使用MyBatis進行查詢操做時沒法查詢出相應的結果,可是純sql又能查出數據時,須要考慮下是否是字段對應實體類的屬性出現問題,解決方法有以下兩點

1>經過在查詢的sql語句中定義字段名的別名,讓字段名的別名和實體類的屬性名一致,這樣就能夠表的字段名和實體類的屬性名一一對應上了,這種方式是通過在sql語句中定義別名來解決字段名和屬性名的映射關係的。

2>經過<resultMap>來映射字段名和實體類屬性名的一一對應關係。這種方式是使用MyBatis提供的解決方式來解決字段名和屬性名的映射關係的。

相關文章
相關標籤/搜索