在MyBatis中resultType和resultMap的区别理解

   resultType和resultMap功能类似,都是返回对象信息,但是resultMap要更强大一些,可自定义。因为resultMap要配置一下表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是,resultType就比较鸡肋了,必须字段名一样,比如说 cId和c_id 这种的都不能映射 。下面介绍几个常用的映射关系:

 

单表查询: resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行bean(实体类)和相应表字段的对应。

<?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" >
<mapper namespace="com.jyt.shop.dao.UserSmsMapper">
	<!-- 发送给用户手机号的resultMap将项目的实体类名与数据库表user_sms字段映射一一对应 -->
	<resultMap id="UserSmsResultMap" type="com.jyt.shop.entity.UserSms">
  		<result property="usId" column="usId" />
        <result property="userId" column="userId" />
        <result property="smsContent" column="smsContent" />
        <result property="smsType" column="smsType" />
		<result property="smsPhone" column="smsPhone" />
		<result property="smsStatus" column="smsStatus" />
		<result property="usCreatedate" column="usCreatedate" />
	</resultMap>
	
	<select id="getSmsByPhoneAndSmsCode" parameterType="java.util.Map" resultMap="UserSmsResultMap">
		SELECT usId,userId,smsContent,smsType,smsPhone,smsStatus,usCreatedate
		FROM USER_SMS
		<where>
			smsStatus= 1 
			<if test="userId !=null and userId !=''">
				and userId = #{userId}
			</if>
			<if test="smsPhone !=null and smsPhone !=''">
				and smsPhone= #{smsPhone}
			</if>
		</where>
	</select>
	
</mapper>

注意:

1)如果resultMap的值不同,你在启动项目时,mybatis会报类似的错:org.apache.ibatis.builder.IncompleteElementException:Could not find result map com.jyt.shop.dao.UserSmsMapper.UserSmsResultMap。

2)如果使用resultType,则<resultMap id="UserSmsResultMap" type="com.jyt.shop.entity.UserSms"></resultMap>和<select id="getSmsByPhoneAndSmsCode" parameterType="java.util.Map" resultType="UserSmsResultMap">中的resultType的值不能相同。否则会报错:Result Maps collection already contains value for xxxxxxx。

参考链接:

https://www.cnblogs.com/coder-lzh/p/8960928.html

https://blog.csdn.net/qq_41378597/article/details/83900060

欢迎大家留言讨论。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值