resultType和resultMap的区别

MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis会自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用。

1、resultType

返回单个实例

<select id="selectUser" parameterType="int" resultType="User">

select * from user where id = #{id}

</select>
返回List集合

<select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" -->
select * from user
</select>

2、resultMap

简单查询:

<resultMap type="User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
</resultMap>
column:数据库中列名称,property:类中属性名称


resultMap:适合使用返回值是自定义实体类的情况

resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型

resultMap : 

映射实体类的数据类型

resultMap的唯一标识

column: 库表的字段名

property: 实体类里的属性名

配置映射文件:

<?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.hao947.sql.mapper.PersonMapper">  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->  <resultMap type="person" id="BaseResultMap">   <!-- column:库表的字段名 property:实体类里的属性名 -->   <id column="person_id" property="personId" />   <result column="name" property="name" />   <result column="gender" property="gender" />   <result column="person_addr" property="personAddr" />   <result column="birthday" property="birthday" />  </resultMap>  <!--id:当前sql的唯一标识   parameterType:输入参数的数据类型   resultType:返回值的数据类型   #{}:用来接受参数的,如果是传递一个参数#{id}内容任意,如果是多个参数就有一定的规则,采用的是预编译的形式select   * from person p where p.id = ? ,安全性很高 -->  <!-- sql语句返回值类型使用resultMap -->  <select id="selectPersonById" parameterType="java.lang.Integer"   resultMap="BaseResultMap">   select * from person p where p.person_id = #{id}  </select>  <!-- resultMap:适合使用返回值是自定义实体类的情况  resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型 -->  <select id="selectPersonCount" resultType="java.lang.Integer">   select count(*) from   person  </select>  <select id="selectPersonByIdWithMap" parameterType="java.lang.Integer"   resultType="java.util.Map">   select * from person p where p.person_id= #{id}   </select> </mapper>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: resultType 是 Mybatis 的配置元素,它决定了 Mybatis 应该如何映射查询结果。有三种类型的 resultType:基本数据类型、POJO 类型和 Map 类型。 resultMap 则是 Mybatis 中的另一种映射结果的方式。它可以定制化映射关系,并且支持复杂类型的映射。与 resultType 不同,resultMap 是一个映射关系的集合,用于将数据库结果映射到 POJO 类型的实例。 总的来说,resultType 更适用于简单的映射关系,而 resultMap 更适用于复杂的映射关系。 ### 回答2: resultTyperesultMap都是MyBatis中用于映射查询结果的关键字,但它们之间有一些不同。 resultType是一个只定义了Java类型的简单别名,在查询语句中使用时,它指定了查询结果的Java类型。例如: ```xml <select id="selectUserById" resultType="com.example.User"> SELECT id, name, age FROM user WHERE id = #{id} </select> ``` 这里的resultType指定了查询结果的类型为com.example.User类。 而resultMap是一个比resultType更复杂的定义,它可以映射数据库表中的列到Java对象的属性上。resultMap可以将数据表中不同的列映射到不同的Java对象属性上,或者将多个列映射到同一个Java对象的属性上。它可以处理各种更加灵活复杂的情况。例如: ```xml <resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="selectUserById" resultMap="userResultMap"> SELECT id, name, age FROM user WHERE id = #{id} </select> ``` 在这个例子中,resultMap定义了各个列与Java属性之间的映射关系,select语句中指定了resultMap的值为userResultMap。 因此,可以看到,resultType只能指定Java类的类型,而resultMap可以做更加灵活的映射,具有更复杂的配置方式。通常,我们在需要处理多表关联查询、查询结果缓存等更高级的查询场景时,需要使用resultMap。而在仅需要返回一种简单查询结果类型时,可以使用resultType。 ### 回答3: MySql 中的 `resultType` 和 `resultMap` 都是 MyBatis 用来处理查询结果的方式,但它们有着不同的使用方式和作用。 `resultType` 指定了查询结果的类型,用来告诉 MyBatis 需要转换的数据类型。它可以是任何一个 Java 类型,MyBatis 会通过类型转换将结果集中的数据转换为指定的类型。使用 `resultType` 时,通常需要与列名进行映射,也就是查询语句中需要使用 AS 子句来定义别名,这些别名需要与 Java 类型中的属性名称对应。简单来说,`resultType` 告诉 MyBatis 需要将查询结果中的每一行映射为一个 Java 对象。 `resultMap` 则是一种更为灵活和强大的结果映射方式。在 `resultMap` 中可以指定多个 `result` 或 `association` 节点,用于定义实体类中的属性和查询结果集中的列之间的映射关系。除了支持将结果集中列的值映射到 Java 对象的属性外,`resultMap` 还支持通过嵌套 `resultMap` 来将结果集中的数据进行更为复杂的分组和封装。在实际开发中,通常会优先使用 `resultMap` 来进行结果集和实体类的映射。 总结来说,`resultType` 主要是适用于简单查询,如只需返回单一类型的数据。而`resultMap` 更为灵活,可以满足复杂的数据映射需求。因此,开发者应该根据实际需要选择不同的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值