mybatis中resultMap和resultType区别,三分钟读懂
Posted 吴皮皮今天吃饱了吗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中resultMap和resultType区别,三分钟读懂相关的知识,希望对你有一定的参考价值。
先说结论:
resultmap与resulttype的区别为:对象不同、描述不同、类型适用不同。
说人话就是,resultmap和resulttype功能差不多,但是resultmap功能更强大
resultType:
使用resultType进行输出映射时,只有查询出来的列名和pojo(简单实例对象)中的属性名一致,该列才可以映射成功。
武断一点来说:一般是以下这几种类型才用resultType
1、基本类型 :resultType=基本类型(int,String等基本数据类型)
2、List类型: resultType=List中元素的类型
3、Map类型 单条记录:resultType =map
多条记录:resultType =Map中value的类型
<select id="count" resultType="int">
select count(id) from t_paper as p
LEFT JOIN t_type as t
ON
p.type_id=t.id
</select>
resultMap:
前面说过,resultMap和resultType的功能类似,但是resultMap更强大一点,resultMap可以实现将查询结果映射为复杂类型的pojo,简单来说就是,resultType解决不了的,都可以交给resultMap来解决。
在使用resultMap之前我们需要先定义一个符合当前需求的resultMap.。
<resultMap id="paperResult" type="Paper">
<!-- column:数据库字段名 property:实体的属(变量)名 -->
<result column="id" property="id"/>
<result column="title" property="title"/>
<result column="type_id" property="typeId"/>
<result column="paper_summary" property="paperSummary"/>
<result column="paper_path" property="paperPath"/>
</resultMap>
<select id="selectPaperListByCondition" resultMap="paperResult">
SELECT
p.*, t.type_name from t_paper as p
LEFT JOIN
t_type as t
ON
p.type_id=t.id
WHERE
title='' and type_name=''
<where>
<if test="title != null and title != ''">
and title like '%$title%'
</if>
<if test="typeName != null and typeName != ''">
and type_name=#typeName
</if>
</where>
limit #start,#size
</select>
mybatis中resultType和resultMap的区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap
resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。
所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,Mybatis就会根据我们配置的信息做映射
resultMap配置方法
<resultMap type="com.test.User" id="userMap">
<result property="userName" column="UserName"/> property User类的字段名
<result property="password" column="password"/>column 数据库返回的字段名或别名
</resultMap>
resultType="User"
resultMap="userMap"
<typeAlias alias="User" type=""com.test.User"/>
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.