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!&quot;&quot;.equals(command.trim())">

andCOMMAND=#{command}

</if>

<iftest="description!=null and!&quot;&quot;.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!&quot;&quot;.equals(command.trim())">

andCOMMAND=#{command}

</if>

<iftest="description!=null and!&quot;&quot;.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的区别的更多相关文章

  1. mybatis中的resultMap与resultType、parameterMap与 parameterType的区别

    Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与  parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...

  2. Mybatis 入门之resultMap与resultType解说实例

    resultMap:适合使用返回值是自己定义实体类的情况 resultType:适合使用返回值得数据类型是非自己定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 i ...

  3. MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别

    MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...

  4. Mybatis 入门之resultMap与resultType讲解实例

    resultMap:适合使用返回值是自定义实体类的情况 resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 id: ...

  5. mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值

    在mybatis中可能会用到的方法 1.模糊查询 <select id="showByIdName" parameterType="User" resul ...

  6. mybatis使用时org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的错误

    最近在使用mybatis时,出现了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 这 ...

  7. Mybatis第七篇【resultMap、resultType、延迟加载】

    resultMap 有的时候,我们看别的映射文件,可能看不到以下这么一段代码: <resultMap id="userListResultMap" type="us ...

  8. mybatis的resultMap与resultType的区别

    一.概述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部Res ...

  9. Mybatis中resultMap与resultType区别

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultM ...

随机推荐

  1. Django学习系列7:使用模板解决“不测试常量”规则,使用模板重构

    之前写的lists/tests.py中的单元测试,要查找特定的HTML字符串,但这不是测试HTML的高效方法. 单元测试规则之一“不测试常量”,编写断言检测HTML字符串中是否有制定的字符串序列,不是 ...

  2. python打开文件的方式

    r 以只读模式打开文件 w   以只写模式打开文件,文件若存在,首先要清空,然后(重新创建) a    以追加模式打开(从EOF开始,必要时创建新文件),把所有要写入文件的数据追加到文件的末尾,即使使 ...

  3. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  4. VCL界面控件DevExpress VCL Controls发布v19.1.2|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  5. MapReduce 中的两表 join 方案解析

    1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...

  6. 任意修改网页内容JS代码

    浏览器输入框执行,chrome需要粘贴后,需要在前面手打javascript: 因为粘贴的会自动过滤 javascript:document.body.contentEditable='true'; ...

  7. underscore的使用

    1.链接 npm underscore:https://www.npmjs.com/package/underscore 官网:https://underscorejs.org/ 2.npm安装:np ...

  8. Linux基础教程 linux下查询history操作时间的方法

    要在linux操作系统中查看history记录的操作时间,可以按如下步骤实现: 学习linux 1,修改/etc/profile文件,在末尾添加:exporthisttimeformat=”%f %t ...

  9. HDU3398—String-(组合数)

    Problem Description Recently, lxhgww received a task : to generate strings contain '0's and '1's onl ...

  10. nginx下的负载均衡

    负载均衡应用场景: 普通web应用部署到多台应用服务器上,客户端通过访问应用服务器发送请求,最简单的就是n对1模式,n个客户端访问同一个应用服务器,这种情况当并发量大了,就无法应对,而且,如果只有一台 ...