在MyBatis中使用查询功能时,我们会发现不论你返回一个对象,还是一个对象的集合,我们在查询的标签select的属性resultType里面写的都是一样的,如下图
按照以往经验,下面那个应该将返回值类型写成List集合,但如果这样写,明显是错误的
这时,我们就可以将查询的标签select的属性设置为resultMap
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
1、属性名不一致的情况
使用原来的查询方式,但是将t_user表中的“username”列名改为“myname”,再次查询,会出现如下情况:
下面列举解决方法:
1)在写sql语句时,使用别名
<!--List<User> getUserList();-->
<select id="getUserList" resultType="user">
select id,myname as username ,password,age,sex,email from t_user
</select>
2)使用自定义反射(resultMap)
<!--List<User> getUserList();-->
<select id="getUserList" resultMap="userMap">
select * from t_user
</select>
<resultMap id="userMap" type="com.softeem.bean.User">
<id column="id" property="id"/>
<result column="myname" property="username"/>
<result column="password" property="password"/>
<result column="age" property="age"/>
<result column="sex" property="sex"/>
<result column="email" property="email"/>
</resultMap>
注意:在resultMap中,若JavaBean中的属性与表格中列名相同的项目,可以不写
resultMap还有一个“autoMapping”(自动映射,默认值为true)属性,可以不加