resultType与resultMap的区别
- resultType:直接指定返回类型,适用于查询结果集中的列名(字段名)与Java实体类中的属性名完全对应的情况。此时,MyBatis会自动进行列名与属性名的映射,无需定义resultMap。
- resultMap:用于定义详细的映射关系,适用于查询结果集中的列名(字段名)与Java实体类中的属性名不一致的情况或需要进行复杂映射的情况。通过resultMap可以精确控制列名与属性名的映射关系,适用于一对一、一对多等复杂映射场景。
实际应用中的例子
1.假设有一个用户表user
,其字段包括 id
、username
、password
,对应的Java对象为User
类,属性为 idx
、usernamex
、passwordx
。如果数据库字段名与Java对象属性名不一致,就需要使用resultMap来定义映射关系:(select标签的resultMap的值是 上面定义的resultMap)
<resultMap id="userMap" type="com.yykj.beans.User">
<id column="id" property="idx" jdbcType="INTEGER"/>
<result column="username" property="usernamex" jdbcType="VARCHAR"/>
<result column="password" property="passwordx" jdbcType="VARCHAR"/>
</resultMap>
<select id="selectById" resultMap="userMap">
select * from user
</select>
2.如果字段名与属性名一致,则可以直接使用resultType,resultType的值是对应实体类 User 的路径:
<select id="selectUser" resultType="com.yykj.beans.User">
SELECT id, username, password FROM user
</select>