Mybatis使用时 resultMap与resultType、parameterMap与 parameterType的区别
Map:映射;Type:Java类型
resultMap 与 resultType、parameterMap 与 parameterType的区别在面试的时候被问到的几率非常高,出现的次数到了令人发指的地步,笔者认为有必要单独列一章郑重声明,共勉
resultMap & resultType
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。
resultMap表示将查询结果集中的列一一映射到bean对象的各个属性。映射的查询结果集中的列标签可以根据需要灵活变化,并且,在映射关系中,还可以通过typeHandler设置实现查询结果值的类型转换,比如布尔型与0/1的类型转换。
例如:
<resultMaptype="hdu.terence.bean.Message"id="MessageResult">
<!--存放Dao值--><!--type是和数据库对应的bean类名Message-->
<idcolumn="id"jdbcType="INTEGER"property="id"/><!--主键标签-->
<resultcolumn="COMMAND"jdbcType="VARCHAR"property="command"/>
<resultcolumn="DESCRIPTION"jdbcType="VARCHAR"property="description"/>
<resultcolumn="CONTENT"jdbcType="VARCHAR"property="content"/>
</resultMap>
<selectid="queryMessageList"parameterType="hdu.terence.bean.Message"resultMap="MessageResult">
SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1
<iftest="command!=null and!"".equals(command.trim())">
andCOMMAND=#{command}
</if>
<iftest="description!=null and!"".equals(description.trim())">
andDESCRIPTION like '%' #{description} '%'
</if>
</select>
resultType 表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。
以下是resultType的写法,将其值设置成对应的java类上即可。不需要上述resultMap的映射关系。
<selectid="queryMessageList"parameterType="hdu.terence.bean.Message" resultType=" hdu.terence.bean.Message ">
SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1
<iftest="command!=null and!"".equals(command.trim())">
andCOMMAND=#{command}
</if>
<iftest="description!=null and!"".equals(description.trim())">
andDESCRIPTION like '%' #{description} '%'
</if>
</select>
ParameterMap(不推荐) & parameterType
ParameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。
一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应,例如上述代码中下划线部分表示将查询结果类型自动对应到hdu.terence.bean.Message的Bean对象属性类型。
Mybatis家族历史
Mybatis出生于GoogleCode,使用的这两个名字叫做resultType和parameterType。
以前的版本叫做iBatis,出生于Apache,以前这两个配置叫做resultClass和parrameterClass,根据这种命名也应该知道这种映射都和java类有关。
#{}和${}的使用
resultMap和ParameterMap书写拼写要使用#{},resultType 和parameterType类型使用${},使用例子如下:
Select ID,COMMAND from Message where COMMAND=#{command}
Select ID,COMMAND from Message where COMMAND=‘${command}’
前者解析为:
Select ID,COMMAND from Message where COMMAND=?具有预编译效果
后者解析为:
Select ID,COMMAND from Message where COMMAND=段子 不具有预编译效果
但是,例如当页面向后台传递一个列名(属性名)的时候,是不希望被预编译出一个?的,此时要用到$格式;
如:加上 order by${param} ,此时param是一个列名。
#{}和 ognl表达式
一般参数的拼写还是保证统一风格为好,便于人读。
Mybatis使用时 resultMap与resultType、parameterMap与 parameterType的区别的更多相关文章
- mybatis中的resultMap与resultType、parameterMap与 parameterType的区别
Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与 parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...
- Mybatis 入门之resultMap与resultType解说实例
resultMap:适合使用返回值是自己定义实体类的情况 resultType:适合使用返回值得数据类型是非自己定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 i ...
- MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...
- Mybatis 入门之resultMap与resultType讲解实例
resultMap:适合使用返回值是自定义实体类的情况 resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 id: ...
- mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值
在mybatis中可能会用到的方法 1.模糊查询 <select id="showByIdName" parameterType="User" resul ...
- mybatis使用时org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的错误
最近在使用mybatis时,出现了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 这 ...
- Mybatis第七篇【resultMap、resultType、延迟加载】
resultMap 有的时候,我们看别的映射文件,可能看不到以下这么一段代码: <resultMap id="userListResultMap" type="us ...
- mybatis的resultMap与resultType的区别
一.概述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部Res ...
- Mybatis中resultMap与resultType区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultM ...
随机推荐
- laravel中间件失效,配置文件重新加载
composer dump-autoload php artisan cache:clear 清理视图缓存 php atisan view:clear 清除运行缓存 php artisan cache ...
- Linux20期学习笔记 Day2
Linux系统进程状态及部分基础命令
- 005-监控项item详解,手动创建item实例
模板里的监控项都可以用 zabbix-get 命令执行 来获取相应的值,方法如下: [root@linux-node2 ~]# zabbix_get -s 192.168.1.230 -k agent ...
- (转) Linux权限管理(基本权限、默认权限)
一.文件基本权限 1-1.基本权限的修改 -rw-r--r-- - 第一个"-"表示文件类型(- 文件,d 目录,l 软链接文件) - rw- r-- ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(7)|函数Functions与闭包Closure]
[易学易懂系列|rustlang语言|零基础|快速入门|(7)函数Functions与闭包Closure] 有意思的基础知识 函数Functions与闭包Closure 我们今天再来看看函数. 在Ru ...
- angularjs 结构的两种写法(2)
app.js里面 route.js 本项目中的路由写法,路由的意思是:对应的跳转页面路径,比如此处当路由是member.user-statisttic时,是会跳转到url:http://.../use ...
- 基本运算符与if while详解:
''' 基本运算符与if while详解: ''' # 算术运算符 # + - * / % // ** # 返回一个数值 # 比较运算符 # > >= < <= == != # ...
- 第四篇:存储库之mongodb、redis、mysql
MongoDB的简单操作 一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的 ...
- python接口自动化四(json数据处理)
前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...
- ASP.NET如何实现断点续传的上传、下载功能?
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...