【Mybatis】中SQL语句的返回类型:resultMap和resultType的区别

resultMap和resultType的区别

MyBatis在查询时,返回类型可以用resultType,也可以用resultMap。

resultType 直接表示返回类型 ,而resultMap需要配置对应关系

resultType跟resultMap 不能同时存在

MyBatis在进行查询映射时,查询出的每个属性,其实都是放在一个Map里,其中键是数据库的字段名,值是其查询出的数据。

①当返回类型是resultType时,MyBatis会将Map里面的键值对取出来,赋给resultType所指定的对象对应的属性。(要保证 结果集的列名与java对象的属性名 完全相同

但是有时候,数据库的字段名和对象的属性名 并不一致,这种情况下,使用 resultType是不能匹配成功的,比如:

数据库字段 user_id 和实体类User中的userId是不能匹配的。

这种情况下,就需要 ResultMap

	<resultMap type="User" id="userMap">
		<id     property="userId"       column="user_id"      />
		<result property="userName"     column="user_name"    />
		<result property="password"     column="password"     />
		<result property="status"       column="status"       />
		<result property="delFlag"      column="del_flag"     />
		<result property="createTime"   column="create_time"  />
	</resultMap>
	<sql id="selectUserVo">
        select u.user_id,  u.user_name, u.password, u.status, u.del_flag, u.create_time from user u		    
    </sql>
	<select id="selectUserByUserName" parameterType="String" resultMap="userMap">
	    <include refid="selectUserVo"/>
		where u.user_name = #{userName}
	</select>

此时 resultMap="userMap"是一个外部resultMap的id,表示将该查询语句的结果 映射userMap上。

这种情况无需关注 实体类的属性名和数据库的列名是否一致,因此非常的灵活,功能也更加强大

总结

  • resultType

基本映射 :查询出来的 列名 和实体类中的 属性名 一致,该列才可以映射成功。

  • resultMap

高级映射 :定义一个数据库 列名 和实体类中 属性名 间的映射关系。

posted @ 2021-10-21 09:30  layman~  阅读(447)  评论(0编辑  收藏  举报