Mybatis中ResultType和ResultMap区分,id和result属性

ResultType和ResultMap的区别

总结:

基本映射:(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
(数据库,实体,查询字段,这些全部都得一一对应),高级映射:(resultMap)如果查询出来的列名和pojo的属性名不一致,
通过定义一个resultType对列名和pojo属性名之间作一个映射关系。(高级映射,字段名称可以不一致,通过映射来实现)。
resultType和resultMap功能类似,都是返回对象信息,但是resultMap要更强大一些,可自定义,resultMap要配置一下,表
和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是
Mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型
的,resultMap则是对外部resultMap的引用,但是resultType和resultMap不能同时存在。
在Mybatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面,其中键是属性名,值则是其对应的值。
(1)当提供的返回值类型属性是resultType时,Mybatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性,
所以其实Mybatis的每一个查询映射的返回值类型都是resultMap,只是当提供的返回类型属性是resultType的时候,Mybatis
会自动的给把对应的值赋给resultType所指定对象的属性。
(2)当提供的返回值类型是resultMap时,因为Map不能很好的表示领域模型,就需要自己再进一步的把它转化为对应的对象,
这常常在复杂查询中很有作用。
resultMap:适合使用返回值是自定义实体类的情况。
resultType:适合使用返回值的数据类型是非自定义的,即jdk提供的类型。

ResultType

resultType可以直接返回给出的返回值类型,比如:String,int,Map等等,其中返回List也是将返回类型定义为Map,然后
Mybatis会自动将这些map放在一个List中,resultType还可以是一个对象。
resultType对应的是Java对象中的属性,大小写不敏感。
resultType如果放的是java.lang.Map,key是查询语句的列名,value是查询的值,大小写敏感。
resultMap指的是定义好了的id,是定义好的resultType的引用。
注意:
用resultType的时候,要保证结果集的列名与Java对象的属性相同,而resultMap则不用,而且resultMap可以用typeHander转换
parameterType:参数类型,只能传一个参数,如果有多个参数要封装,如封装成一个类,要写包名+类名,基本数据类型则可以省略。
一对一,一对多时,若有表的字段相同必须写别名,不然查询结果无法正常映射,出现某属性为空或者返回的结果与想象中的不同时,而这往往是没有报错的。

ResultMap

适合使用返回值是自定义实体类的情况。
映射实体类的数据类型
id:resultMap的唯一标识
column:库表的字段名
property:实体类的属性名

id和result属性

<id property=" " column=" "/>
<result property=" " column=" "/>
这是最基本的结果集映射,id和result将列映射到属性或简单的数据类型字段(String,int,double,Date等)
这两者唯一不同的是,在比较对象实例时,id作为结果集的标识属性,这有助于提高总体性能,特别是应用缓存和嵌套结果映射的时候。
AttributeDescription
property映射数据库列的字段或属性。如果JavaBean 的属性与给定的名称匹配,就会使用匹配的名字。否则,MyBatis 将搜索给定名称的字段。两种情况下您都可以使用逗点的属性形式。比如,您可以映射到“username”,也可以映射到“address.street.number”。
column数据库的列名或者列标签别名。与传递给resultSet.getString(columnName)的参数名称相同。
javaType完整java类名或别名(参考上面的内置别名列表)。如果映射到一个JavaBean,那MyBatis 通常会自行检测到。然而,如果映射到一个HashMap,那您应该明确指定javaType 来确保所需行为。
jdbcType这张表下面支持的JDBC类型列表列出的JDBC类型。这个属性只在insert,update或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果您直接编写JDBC代码,在允许为空值的情况下需要指定这个类型。
typeHandler我们已经在文档中讨论过默认类型处理器。使用这个属性可以重写默认类型处理器。它的值可以是一个TypeHandler实现的完整类名,也可以是一个类型别名。
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值