Mybatis 查詢 返回值中只有id有值,其他都是null;

最近在重溫mybatis, 但是在做練習的時候發現一個問題;

查詢,簡單的查詢,返回之後發現結果中,只有id被映射了值,其他屬性都是null; 很納悶,爲什麼一個簡單的測試會出現這種問題;

一開始以爲是自己代碼或者SQL寫的有問題;結果都沒有問題 SQL在數據庫執行是有值的

ok,問題定位到了映射,

提前劇透 .是因爲下劃線和駝峯的原因,無法正確映射,詳細解釋看下面

查看xml,最開始是這樣寫的 ↓↓↓↓↓↓↓

1. 採用的resultType  原因就出現在這裏      

<!-- 查詢關聯角色 -->
    <select id="selectRoles" resultType="com.zl.box.bootmybaits.model.Role" parameterType="int">
        select r.* from role r left join user_role u on r.ID = u.RID where u.UID= #{id}
    </select>

爲何原因出現在resultType呢,  看下面實體類與數據庫表結構

public class Role implements Serializable {

    /**
     * 編號
     */  
    private Integer id;

    /**
     * 角色名稱
     */   
    private String roleName;

    /**
     * 角色描述
     */
    private String roleDesc;

    ....省略get/set方法
}

數據庫中是採用下劃線連接單詞的,而實體類中是採用的駝峯規則;這就導致了 SQL 中r.*  明明返回了值 但是無法正確映射的問題;

所以以後遇到相同問題的小夥伴,採用resultMap吧,做一下映射關聯,這樣就可以解決問題了

解決方式如下:

--resultMap:

    <resultMap id="BaseResultMap" type="com.zl.box.bootmybaits.model.Role">
        <id column="ID" property="id" jdbcType="INTEGER"/>
        <result column="ROLE_NAME" property="roleName" jdbcType="VARCHAR"/>
        <result column="ROLE_DESC" property="roleDesc" jdbcType="VARCHAR"/>
    </resultMap>


--SQL 
    <!-- 查詢關聯角色 -->
    <select id="findRoleByUid" resultMap="BaseResultMap" parameterType="int">
        select r.* from role r left join user_role u on r.ID = u.RID where u.UID= #{uid}
    </select>

然後就OK了;

當然還有一種解決方式那就是,不要寫成r.*, 

select r.* from role

寫成r.id id, r.role_name roleName, r.role_desc  roleDesc 即可 

select r.ID id,r.ROLE_DESC roleDesc, r.ROLE_NAME roleName from role r

Ok  最終的檢驗成果: 都成功的返回了值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章