今天碰到一个问题,在启动工程的时候某个mybatis生成的Mapper.xml文件报“Could not find result map java.lang.String”。对照着这个文件检查了好久也没有查到原因。结果同事在另一个Mapper.xml文件找到了这么一句代码:
resultMap="java.lang.String"
随手一查,因为报错信息的不准确,很多人在这个问题上浪费了不少时间。
通过mybatis进行查询时,返回方式可以有两种:resultType和resultMap。两者在使用上有一定的区别。
resultType:如果只有单个返回值的查询可以直接定义返回值的类型如String、int等。如果返回的是多列数据,则可以使用Map或POJO(Plain Ordinary Java Object 简单的Java对象)接收返回值。结果对象是Map,则键是数据库的属性名;用POJO映射,则POJO的属性要与数据库属性名称一致,否则将无法映射。
resultMap:当POJO的属性无法与查询结果的列名一一对应时,可以使用resultMap定义对应关系。只要在Mapper.xml中加入映射的定义即可。这种方式也适用于复杂的连表查询,无论是一对一还是一对多都可以使用这种方式。