zoukankan      html  css  js  c++  java
  • MyBatis中关于resultType和resultMap的区别

    MyBatis中关于resultType和resultMap的区别 

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

    Xml代码  收藏代码
    1. <resultMap id="BaseResultMap" type="po.BuyerCompanyInfo">  
    2. <id column="id" jdbcType="BIGINT" property="id" />  
    3. <result column="executive_firstname"   jdbcType="VARCHAR"property="executiveFirstname"/>  
    4. <result column="executive_lastname" jdbcType="VARCHAR"  
    5. property="executiveLastname" />  
    6. <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />  
    7. </resultMap>  


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

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

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

    个人总结: 
    1.与数据表对应的实体类中若有如下类似字段 
    表中create_time 
    类中createTime 
    返回值类型为 resultMap 
    否则,select方法的结果值中createTime字段的值为NULL 
    即  

    resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型,resultType中的内容就是pojo在本项目中的位置。当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,因此对于单表查询的话resultType是最合适的。


    resultMap:适合使用返回值是自定义实体类的情况,如果在写pojo时,不想用数据库表中定义的字段名称,也是可以使用resultMap进行处理对应的。多表连接查询时,若是一对一的连接查询,那么需要新建一个pojo,pojo中包括两个表中需要查询出的所有的字段,这个地方的处理方式通常为创建一个继承一个表字段的pojo,再在里面添加另外一个表内需要查询出的字段即可。若是一对多查询时,若是使用内连接查询,则很可能出现查询出的字段有重复。使用双重for循环嵌套处理即可。

    resultType查询出来的列名和pojo中属性名一直才能映射成功;

    resultMap如果查询出来的列名和pojo中的属性名不一致,通过定义一个resultMap对列名和属性名之间做一个映射关系。

  • 相关阅读:
    keil 提示"running with code size limit 32k"
    关于C语言编译出现give arg types警告问题
    windows10添加设备管理器的快捷方式到桌面
    deepin20社区版 安装 STM32CubeIDE 小记
    STM32开发 printf和scanf函数的重定向——修改HAL标准库用printf函数发送数据直接输出
    ardupilot环境配置之eclipse指定jdk版本启动,解决“Version XXXX of the JVM is not ......"报错的问题
    jdk9,10,11,12没有jre安装方法
    C++ 类构造函数 & 析构函数
    STM32 Keil中关于stlink的调试 下载设置
    STM32 SWD下载出现no target connect解决方法
  • 原文地址:https://www.cnblogs.com/whymoney1000/p/11241250.html
Copyright © 2011-2022 走看看