调用mapper查询数据时,一般来讲,需要搞清楚返回集与返回类型的区别:
一:ResultMap
实际上对于数据库表而言,通常会为其自动生成一组model类,继承基础抽象类方法的mapper,以及对应的mapping实现文件,其中ResultMap在基础mapping文件很常见,值被设置为BaseResultMap,下面以一个省略get/set方法的简单model类为例:
public class User{ private Integer id, private String userName, }
<mapper namespace="UserMapper" > <resultMap id="BaseResultMap" type="User" > <id column="id" property="id" jdbcType="Integer" /> <result column="user_name" property="userName" jdbcType="String" /> </resultMap> </mapper>
数据库字段分别对应id,user_name,那么基础mapping文件中会存在如下映射,id对应id,userName对应user_name;即当ResultMap中使用BaseResultMap时,mybatis会自动根据字段设置映射关系,无需将数据库字段更改成为符合类属性名的别名,后调用model类的set方法进行实例化,免去了手动设置的问题。
二:ResultType
ResultType比较特殊,用来指定一个方法返回字段的类型,可以是Integer,Long,String等,也可以用来指定model类(不一定是该mapper对应model),map集合等,没有明显限制。当使用ResultType作为返回集的时候,就需要注意一些问题了,如果是Integer这样的包装类,由于对返回类型的指定,需要对SQL查询结果进行Java类型转换,可能会出现无法转换为该类型;
当以model类作为返回类型的时候,需要手动将字段更改别名,myba才能识别并将属性注入到实体类,当以数据库字段直接返回时,会出现部分属性在数据库中有值,但是返回后却出现空指针异常,也正是这个原因;
当以map作为返回形式的时候,方法返回形式通常是Map<String,Object>,具体返回包括HashMap,TreeMap等,字段名作为key,value以Object的形式,映射至map集合中,具体类型需要开发者自行判断,但是不建议这种形式,魔法值作为key是非常不规范的,也难以阅读。
Mybatis之ResultMap,ResultType总结
原文:https://www.cnblogs.com/hli-tech/p/13064983.html