问题表现

今天遇到个很诡异的问题,自己写了一个查询sql,发现Order变量只有部分数据有值,其他都是null,对了好久字段是不是命名错了都没发现啥问题,最后才发现是用错resultType的锅。
查询sql:
mapper:

<select id="selectByOrderNo" resultType="com.xxx.Order">select<include refid="column_List"/>from t_orderwhere order_no=#{orderNo}
</select>

Do:

public class Order {private Integer executeCount;private Long nextExecuteTime;private Integer status;private String env;private String orderNo;
}

结果:

{"executeCount" = null"nextExecuteTime" = null"status" = 2"env" = "pre""orderNo" = null
}

问题分析

数据库里这条数据都是有值的,但debug过程中只有部分有值。从结果看出Order属性变量名与表字段名一致的字段有值,不相同的为null,这就说明是因为数据间关系没有映射上。

resultType与resultMap

这两种都是mybatis查询数据数据库时的返回类型,那他们在使用上有什么区别呢?

1.如果只是返回一个值,比如说String或者int,那直接用resultType就行了

<select id="getEnv" resultType="java.lang.String">select env from t_order where id=#{id}
</select>

2.如果sql查询结果返回的列名和实体类中的字段名一致,可以使用resultType,MyBatis会自动把查询结果赋值给和字段名一致的字段

public class Urder {private Long id;private String userName;private String sex;
}

3.如果不一致,mapper里的sql语句中可以使用别名的方式使其一致。

<select id="getUserName" resultType="com.xxx.User">select user_name as userName, sex from t_user
</select>

4.当sql的列名和实体类的列名不一致,这时就可以使用resultMap了

<resultMap id="userMap" type="com.xxx.User"><id property="id" column="id"/><result property="userName" column="user_name"/><result property="sex" column="sex"/>
</resultMap>
<select id="getUsers" resultMap="userMap">select id, user_name, sex from t_user
</select>

property是实体类的字段名,column是sql查询的列名

对于简单的映射,resultType和resultMap区别不大。但是resultMap功能更强大,可以通过设置typeHander来自定义实现功能

MyBatis resultType和resultMap的区别相关推荐

  1. oracle resulttype,MyBatis中关于resultType和resultMap的区别介绍

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而re ...

  2. MyBatis -- resultType 和 resultMap

    MyBatis -- resultType 和 resultMap 一.返回类型:resultType 二.返回字典映射:resultMap 一.返回类型:resultType 绝⼤数查询场景可以使用 ...

  3. MyBatis中关于resultType和resultMap的区别

    使用resultType做自动映射时,要注意字段名和POJO的属性名必须一致. 使用resultType做自动映射时,可以不一致.但是你要想不一致.那么就必须在<mapper>标签下,添加 ...

  4. mybatis中resultType和resultMap的区别

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

  5. ResultType和ResultMap的区别

    ResultType和ResultMap都是执行查询语句时返回的结果集 ResultType ResultType相对与ResultMap而言更简单一点.只有满足ORM(Object Relation ...

  6. MyBatis的resultType和resultMap的区别

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  7. mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数

    mybatis复习02,简单的增删改查 创建数据表 user_info 在项目中创建数据表对应的实体类 UserInfo.java 在pom.xml文件中引入依赖 创建核心配置文件mybatis-co ...

  8. 全面解析resultType和resultMap的区别

    一.解决数据库字段和属性字段不一致问题 开启驼峰命名,这只能解决特定字段不一致问题,如aa_bb映射成aaBb属性: 起别名,别名的名称毫无疑问就是pojo类中属性名,使用了别名就解决了pojo属性和 ...

  9. resultType 与resultMap 的区别

    2019独角兽企业重金招聘Python工程师标准>>> resultType: 使用resultType进行输出映射,只有查出来的列名与pojo中的属性名一致,才能映射成功 resu ...

最新文章

  1. 拿大厂机器学习岗 offer,吐血整理的面试秘籍!
  2. C++ sizeof与strlen
  3. MATLAB实战系列(九)-遗传算法(GA)求解旅行商问题(TSP)思路解析
  4. 微信小程序+微信公众号开发总结
  5. 云服务器安装操作系统后如何连接,服务器如何安装操作系统
  6. CENTOS5下VSFTPD的设置
  7. Java 200+ 面试题补充 ThreadLocal 模块
  8. python自动化测试常见面试题二_思考|自动化测试面试题第二波
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园订餐点餐外卖管理系统
  10. Leetcode每日一题:50.powx-n
  11. 编译内核出错:invalid option `abi=aapcs-linux'
  12. arcgis图层叠加不匹配
  13. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)
  14. python操作数据库之删除数据
  15. thinkphp5 两个控制器传参数_Thinkphp5代码执行学习
  16. 互联网视频直播技术(广电总局、优酷土豆、XX直播)
  17. word转变pdf插件
  18. w ndows键是哪一个,Win10截图快捷键是哪个?Windows10自带截屏快捷键使用方法大全...
  19. 一位硕士毕业生三个月求职经历与经验结晶【转帖】
  20. kettle 资源库 配置信息

热门文章

  1. C/C++中的易混淆名词
  2. 一个不像老板的好老板
  3. 局域网中PC访问VMware虚拟机中的Ubuntu
  4. 在筛选界面增加下载模板按钮(模板一般为EXCEL格式)
  5. google首页被篡改
  6. Maven 的打包方式
  7. Makefile之cc编译命令
  8. 脚手架搭建微信小程序问题汇总
  9. Linux oracle 如何安装,Linux 安装Oracle详细步骤
  10. 模块使用——震动开关模块