Resultmap和Resultype这两兄弟哪长得不一样???

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型属性是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
看到这些是不是有些绕呢???不急不急,接下来通过一个案例来展示。

package com.wz.po;

/**
 * 客户持久化类
 */
public class Customer {
	private Integer id;       // 主键id
	private String username; // 客户名称
	private String jobs;      // 职业
	private String phone;     // 电话
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getJobs() {
		return jobs;
	}
	public void setJobs(String jobs) {
		this.jobs = jobs;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", username=" + username + 
				       ", jobs=" + jobs + ", phone=" + phone + "]";
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace表示命名空间 -->
<mapper namespace="com.wz.mapper.UserMapper">
	<resultMap type="com.wz.po.User" id="userResultMap">
		<id property="id" column="t_id"/>
		<result property="username" column="t_username"/>
		<result property="jobs" column="t_jobs"/>    //这里是重点resultmap
		<result property="phone" column="t_phone"/>
	</resultMap>
	<select id="findAllUser" resultMap="userResultMap">
		select * from t_user
	</select>
</mapper>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace表示命名空间 -->
<mapper namespace="com.wz.mapper.CustomerMapper">
    <!--根据客户编号获取客户信息 -->
	<select id="findCustomerByld" parameterType="Integer"
		resultType="com.wz.po.Customer">   //这里是重点resultype
		select * from t_customer where id = #{id}
	</select>
</mapper>

●**元素**:配置文件的根元素
namespace属性:命名空间,即com.wz.mapper.CustomerMapper
●**子元素**:执行查询操作
id属性:元素在映射文件中的唯一标识
parameterType:传入参数的类型
resultType:返回结果类型
SQL查询语句中“#{}”标识一个占位符,“#{id}” 标识该占位符接收参数名为id的值

其实不难看出,如果使用Resultype,要求DAO层的属性名与表格字段名一一对应;而Resultmap却不然,将实体类的属性名与表格字段名进行一一映射。

ResultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值