①MyBatis中resultType和resultMap的区别
1.使用MyBatis查询数据库记录时,返回类型常用的有两种:resultType和resultMap。那么两者之间有什么区别呢?
如果只是返回一个值,简单类型,比如说String或者int,那直接用resultType就行了
<select id="getUserName" resultType="java.lang.String">
select user_name from t_users
</select>
2.如果sql查询结果返回的是单一记录列名和实体类中的字段名一致,可以使用resultType,MyBatis会自动把查询结果赋值给和字段名一致的字段。 如果sql查询结果返回的列名和实体类中的字段名一致,可以使用resultType,MyBatis会自动把查询结果赋值给和字段名一致的字段。
@Data
public class Users {
private Long id;
private String userName;
private Integer sex;
}
<select id="getUsersType" resultType="com.zkzong.mybatis.domain.Users">
select user_name userName, sex from t_users
</select>
3.如果单一记录,列不一致,sql语句中可以使用别名的方式使其一致。
当sql的列名和实体类的列名不一致,这时就可以使用resultMap了。
<resultMap id="userMap" type="User>
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
这样把相应的数据库字段映射到创建的实体类,column代表的是数据库中字段名字,property代表的是创建的实体类中相应的字段名,也可以只修改不一样的字段名,也能得到同样的结果。
4.如果返回的是记录的多条,字段对应则用resultType="User"
但是dao中是这样写
public ArrayList<String> searchUserRoles(int userId);
5.如果返回的是记录的多条,字段不对应则用resultType="Map",而且resultMap要自定义映射。
但是dao中这样写
public ArrayList<Hashmap> searchUserRoles(int userId);
也就是多条记录是依靠dao中的返回值来定义的。