Mapper 中的 resultType 使用 pojo 跟使用 java.util.Map 的区别?

<select id="" resultType="pojo类">
        // sql代码 。。。
</select>

<select id="" resultType="java.util.Map">
        // sql代码 。。。
</select>

虽然我知道既然有 pojo 这个概念就不可能纯用 map 去取代它,
但我只知其然不知其所以然,我想知道:
1. 为什么不能纯使用 map?
2. 而在什么情况下,又应该使用 map ?

求大神解答,这个问题困惑我好久了,写着代码都不安心?

map的缺点是它缺乏固定的类型,所以从调用者看,没有办法享受开发环境中字段上下文的提示,如果写错了字段名,也没有办法检查出来。map的效率也要比pojo差。
map的好处是免维护一个pojo类,修改数据库字段就行了。编写简单方便。
其实说白了,就是因为java自身的局限,和ruby、python、js甚至C#比,java是静态的语言,缺乏动态类型的支持,所以才需要map这么一个折衷的方案。

就是返回值类型不一样,使用结果都一样。java是面向对象的语言,操作pojo比操作map简单,给你两个返回值,肯定是哪个简单开发用哪个啊。

比如:查询用户列表数据,输出每个用户账号
用pojo你只需要用户列表循环获取账号属性就行;
用map你要循环列表再循环map获取账号属性。

当你觉得sql操作map简单的时候就用map(返回值简单的时候可以用,示例:只查询一个用户的用户名)

resultType通常只有在查询的时候会用到:
使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

道理很简单

假设数据库表table有以下几个列
id title content

你在pojo实体类中有以下几个字段
id title content

这种情况下pojo中的属性名和数据库中的列名一致,这种情况下列里存在的值就可以和实体类相对应,就是可以保证正常映射。
但是:
有的时候一些公司的业务需要为我们的pojo类增加一些前缀,如
csdn_id,csdn_title,csdn_content
这个时候数据库里的列名和实体类不对应,为了让数据库里的值与pojo能正常映射,这个时候就需要为数据库里的列起一个别名,这个时候就用到了resultMap

小结:其实resulttype和resultMap都是mybatis绑定数据库的一种方式,个人更推荐resultmap
另外,通过resultMap也可已配置一对多,多对一的方式,适合多变的需求

resultType即结果类型 看返回结果来定 各有各的用法

resultType返回值可以自己家设置自己需要的返回对象,而resultMap返回的是xml中定义的返回实体对象,一般返回的实体有扩展字段但resultMap中不包含时就用resutType