resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。
如果在Sql语句中,所查询的字段名和实体类中的属性名不一致,那么在查询过程中,Mybatis就会在实体类中找不到该字段所对应的属性名,那么查出来的数据就会为NULL。
如果sql查询到的字段名与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中。
第二种解决办法使用ResultMap结果集映射。
第一步:添加标签
<!--把结果集映射为一个User -->
<resultMap id="userMap" type="com.shige.pojo.User"> 将数据库中的列名映射为实体类中的属性名,将二者绑定在一起。
<result column="数据库中的字段" property="实体类中的属性">
</resultMap>
第二步:将resultMap的ID属性传给sql语句的resultMap属性
<select id="getUserById" parameterType="int" resultMap="userMap">
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
学生表和教师表联合查询,查询出学生表中的教师ID属性所对应的教师姓名
第一步:查询出所有学生的信息
第二步:设置结果集映射,嵌套子查询
<!--复杂类型-->
<association property="teacher" column="tid" javaType="com.shige.pojo.Teacher" select="getTeacher"/>
第三步: 进行子查询
<select id="getTeacher" resultType="com.shige.pojo.Teacher">
select * from Teacher where id=#{id};
</select>
学生表和教师表联合查询,查询出学生表中的教师ID属性所对应的教师姓名(第二种方式)
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<!--复杂类型-->
<association property="teacher" javaType="com.shige.pojo.Teacher">
<result property="name" column="tname"/>
</association>
Mybatis_19_结果集映射 resultMap 复杂类型使用(多对一的处理)
原文:https://www.cnblogs.com/szqengr/p/14743831.html