当前位置: 首页 > news >正文

mabatis使用疑问

resultType 和resultMap 的区别!

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接
表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。

1.resultType

 

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

 

这里要强调的是,Mybatis是对返回的结果的每一行做映射的。所以,下面的语句返回的是Integer,而不是List

  1. <select id="count" parameterType="AreaDto" resultType="java.lang.Integer">  
  2.         SELECT id FROM USER  
  3. </select
  1. <select id="count" parameterType="AreaDto" resultType="java.lang.Integer">  
  2.         SELECT count(*) FROM USER  
  3. </select>  
  4. 返回一个int
  1. <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>  
  2.     select id, username, hashedPassword  
  3.     from some_table  
  4.     where id = #{id}  
  5. </select>  
  6. 返回map

 

这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。那样你的应用程序将会使用JavaBeans或POJOs(Plain Old Java Objects,普通Java对象)来作为领域模型

返回javaBEAN 对象

 

  1. <select id="count" parameterType="AreaDto" resultType="User">  
  2.         SELECT * FROM USER  
  3. </select>   
  4. 要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径
  5. <typeAlias type=”com.someapp.model.User” alias=”User”/>  
  6. 这些情况下,MyBatis会在幕后自动创建一个ResultMap,基于属性名来映射列到JavaBean的属性上

2.resultMap

 

MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。

当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。

 

简单resultMap配置 

  1. <resultMap type="com.liulanghan.Blog" id="BlogResult">    
  2.     <id column="id" property="id"/>    
  3.     <result column="title" property="title"/>    
  4.     <result column="content" property="content"/>    
  5.     <result column="owner" property="owner"/>    
  6. </resultMap>   
  7.    
  8. <select id="selectBlog" parameterType="int" resultMap="BlogResult">    
  9.       select * from t_blog where id = #{id}    
  10. </select>  

结果集的列比resultMap多会报错么?
不会,只映射resultMap中有的列。

 

结果集的列比resultMap少会报错么?
不会,只映射结果集中有的列。

 

转载于:https://www.cnblogs.com/hjmlp/p/6116805.html

相关文章:

  • selenium css(转)
  • 【Todo】Spark运行架构
  • mysql 行锁,表锁 测试
  • 信息安全-5:RSA算法详解(已编程实现)[原创]
  • 最近用Timer踩了一个坑,分享一下避免别人继续踩
  • SharePoint 2013 弹窗效果之本地HTML打开方式(二)
  • NoClassDefFoundError: org/aspectj/lang/JoinPoint
  • Java ResultSet的getRow()
  • 当接口被调用时使用Spring拦截器注入运行时数据
  • validatebox实现多重规则验证
  • Spring MVC的RequestContextHolder使用误区
  • 面对问题时尽量避免的两种思维
  • jQuery API 中文文档
  • 在iptables防火墙下开启vsftpd的端口
  • 包装类型的存在便于了集合类添加原生数据
  • python3.6+scrapy+mysql 爬虫实战
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Debian下无root权限使用Python访问Oracle
  • github指令
  • Java反射-动态类加载和重新加载
  • MobX
  • Python_OOP
  • ReactNativeweexDeviceOne对比
  • tab.js分享及浏览器兼容性问题汇总
  • ucore操作系统实验笔记 - 重新理解中断
  • vue脚手架vue-cli
  • 百度地图API标注+时间轴组件
  • 对象管理器(defineProperty)学习笔记
  • 容器服务kubernetes弹性伸缩高级用法
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 实现菜单下拉伸展折叠效果demo
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 移动端唤起键盘时取消position:fixed定位
  • 用 Swift 编写面向协议的视图
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 昨天1024程序员节,我故意写了个死循环~
  • # C++之functional库用法整理
  • #Linux(Source Insight安装及工程建立)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (23)Linux的软硬连接
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET分布式缓存Memcached从入门到实战
  • .NET开发人员必知的八个网站
  • .NET实现之(自动更新)
  • .Net中的集合
  • ::before和::after 常见的用法
  • @EventListener注解使用说明
  • @TableId注解详细介绍 mybaits 实体类主键注解