resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题。比如:列名和对象属性名不一致时可以使用resultMap来配置;还有查询的对象中包含其他的对象等。

Xml配置文件:MyBatis-Configuration.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 类型别名只是为Java类型设置一个短的名称。他只和xml配置有关,存在的意义仅用来减少类完全限定名的冗余 -->
<typeAliases>
<typeAlias alias="narCode" type="com.test.model.NarCode"/>
</typeAliases>
<!-- 程序中所用到sql映射文件都在这里列出,这些映射sql都被Mybatis管理 -->
<mappers>
<mapper resource="com/test/xml/NarCodeMapper.xml"/>
</mappers>
</configuration>

Xml映射文件配置:NarCodeMapper.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 在sql映射文件中,Mybatis中namespace终于派上用场,它使得映射文件和接口之间的绑定变的非常自然。 在iBatis中namespace不是必须的 -->
<mapper namespace="com.test.dao.NarCodeMapper"> <resultMap id="BaseResultMap" type="narCode">
<!-- property是实体类属性,column是表列名 -->
<id property="id" column="id" jdbcType="VARCHAR" />
<result property="cnt" column="cnt" jdbcType="VARCHAR" />
<result property="parentid" column="parentid"jdbcType="VARCHAR" />
<result property="dlevel" column="dlevel" jdbcType="VARCHAR" />
</resultMap>
<!-- 返回单个实例-->
<select id="getNarCode" parameterType="java.lang.String"
resultType="narCode">
select a.id,a.cnt,a.parentid,a.dlevel from nar_code a
where a.id = #{id,jdbcType=VARCHAR}
</select>
<!-- resultType非常适合返回jdk的提供的类型 -->
<select id="getNarCodeCount"
        resultType="java.lang.Integer">
        select count(*) from nar_code a
     </select> <!-- 返回List集合-->
<select id="getNarCodeList" resultType="BaseResultMap">
        select a.id,a.cnt,a.parentid,a.dlevel from nar_code a
    </select>
</mapper>

MyBatis中关于resultType和resultMap的具体区别如下:

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是列名,值则是其对应的值。

1.当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis会自动把对应的值赋给resultType所指定对象的属性。

2.当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

最新文章

  1. 排列组合算法(PHP)
  2. 转 一个典型的 C++ 程序员成长经历:
  3. Workday为何迟迟不进入中国
  4. 执行原始的 SQL 查询
  5. Java算法求最大最小值,冒泡排序,斐波纳契数列一些经典算法&lt;不断更新中&gt;
  6. Zephyr-开发流程
  7. ChangeServiceConfig2 function
  8. iOS_67控件外观对照
  9. What is WCF
  10. Android开发技巧——自定义控件之增加状态
  11. html&amp;css学习二
  12. Win64/Linux 上PyMouse安装
  13. HTTP和HTTPS协议,看一篇就够了
  14. HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)
  15. JVM总结(六):早期(编译期)优化
  16. Google地图开发
  17. MYSQL 解决中文字符集乱码问题的方法
  18. java实现远程控制
  19. Ubuntu中利用rename批量重命名
  20. linux编译安装aria2

热门文章

  1. xgboost算法教程(两种使用方法)
  2. php-laravel安装与使用
  3. 进阶篇:4.1)DFA设计指南:简化产品设计(kiss原则)
  4. python-编程从入门到实践
  5. 136.只出现一次的数字 leetcode ^运算符 JavaScript解法
  6. cmake-index-3.11.4机翻
  7. scrapy-redis+selenium+webdriver 部署到linux上
  8. 无法找到 ContextLoaderListener 类
  9. 软件工程第九周psp
  10. python 读取blob