1,如果涉及到多表查询,必须用resultMap方式。如果用resultType方式,那么获取的信息只能放到一个类里面,而像Customer和Order这种关系,我们希望查出Customer的同时查出多个他里面的orderList集合,也就是要查询不止一种对象,就必须使用resultMap映射的方式,才能将关联到的那个类的信息拿到。
2,如果把配置文件中的查询语句改为 select id,user_name fromcustomer,同时把数据库中的customer表的name字段改为user_name字段,Customer实体类中的name属性名不变,再执行查询,会发现name查不出来。因为查询结果是根据实体类的属性和返回结果集的列字段名对应的,如果不一致,则无法使用set方法注入值。
这种问题也可以通过resultMap的方式解决,用resultMap映射一下就可以了。
例如:定义查询sql语句是:
<sql id="allColumn">
id,user_name,password
</sql>
<select id="findUserById" parameterType="int" resultType="cn.itcast.domain.User">
select <include refid="allColumn"/> from user where id=#{id}
</select>
也就是select id,user_name,password fromuser where id=#{id}
而实体类User中的属性名是username,将数据库中的列名也修改成user_name,返回结果username为null。
修改:通过resultMap方式
<sql id="allColumn">
id,user_name,password
</sql>
<resultMap type="cn.itcast.domain.User" id="findUserById">
<id property="id" column="