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  最终的检验成果: 都成功的返回了值

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