Mybatis的resultType的说明

MyBatis中resultType与resultMap的使用

在Java中使用MyBatis进行开发时,关于标签中resultType属性是一个常见问题。
问题:Mybatis的查询结果为List<String>集合时,resultType应该定义成什么?
答案: 将resultType设置为java.util.List导致了错误,实际上应该指定为List中元素的具体类型
resultType的2种使用场景:
1.基本类型、
2. List类型、

错位写法

<!--通过角色获取拥有该角色的人员-->
    <select id="getUserList" parameterType="java.lang.String" resultType="java.util.List">
        select
            sur.user_id
        from
            sys_user_role as sur
            left join
                sys_role as sr
            on
                sur.role_id = sr.role_id
        where
            sr.role_name = #{roleName}
    </select>

resultType="java.util.List"的类型是导致错误的原因!!!

上面是SQL查询,其中的resultType写成了类型为List。这样在实际运行的时候就会出现问题。resultType代表的是返回内容的具体类型,而不是List。

resultType常见的取值
1、基本类型 :resultType=基本类型
2、List类型: resultType=List中元素的类型
3、Map类型 : 就别用resultType给自己找麻烦,而用resultMap即可

接下来我们就来讲一下Mybatis中resultType与resultMap之间的关系和使用场景。

2.1 resultType
从select语句中返回的期望类型的类的完全限定名或别名。注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。

2.2 resultMap
从这条语句中返回的期望类型的类的完全限定名或别名。注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。

2.3 共同点
resultType与resultMap首先都是用来归纳查询类型sql的结果集,对查询结果进行你需要的结构描述。对于同一个select标签中二者不能共存。这一点对很多人来说很好理解。重要的是不同点和对应的使用场景。

2.4 二者分别的使用场景
对于查询结构需要返回的简单pojo,结果都可以映射到一致的hashMap上,换句话来说就是数据库列名可以精确匹配到pojo属性的。一般都用resultType。其实这里有一个隐含的构建机制。映射到resultType的结果都是MyBatis在幕后自动创建了一个resultMap来处理的。
简而言之,只要resultType能干的事情resultMap都能干。二者定位是:

resultType用来处理非常简单的结果集,就是列名能够与pojo属性匹配的的结果集。
如果你只需要查询一个班级的简单情况,那么用这个再合适不过了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值