mybatis 解决从列名到属性名的自动映射失败问题


Posted in Java/Android onJune 30, 2021

问题背景

从数据库中取出数据映射到实体类时,实体类中只有部分属性映射成功,其余属性值皆为null。

问题描述

如下图AreaDao.xml文件中描述了queryArea()方法从数据库获取Area对象的各个属性值的查询过程,最后执行查询结果显示只有属性priority被成功地赋值

AreaDao.xml

<select id="queryArea" resultType="com.imooc.wechatpro.model.Area">
        SELECT area_id, area_name, priority, create_time, last_edit_time
        FROM tb_area
        ORDER BY priority
        DESC
</select>
AreaDaoTest.java
Area area = areaDao.queryAreaById(3);
area = {Area@7489} 
 areaId = null
 areaName = null
 priority = {Integer@7513} 312
 createTime = null
 lastEditTime = null

数据库中对应的表tb_area:

mysql> select * from tb_area;
+---------+-----------+----------+-------------+----------------+
| area_id | area_name | priority | create_time | last_edit_time |
+---------+-----------+----------+-------------+----------------+
|       1 | 南苑      |      302 | NULL        | NULL           |
|       2 | 北苑      |      307 | NULL        | NULL           |
|       3 | 东苑      |      312 | NULL        | NULL           |
+---------+-----------+----------+-------------+----------------+

原因

实体类Area中的属性使用的是驼峰命名规则,默认情况下无法与数据库表的列名相匹配

Area.java
public class Area {
    private Integer areaId;
    private String areaName;
    private Integer priority;
    private Date createTime;
    private Date lastEditTime;
    ······
}

解决办法

在mybatis的配置文件mybatis-config.xml中将mapUnderscoreToCamelCase设为true,关于配置文件mybatis-config.xml的各种属性配置可以参考官方文档

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
</configuration>

当然这还没完,为了让文件mybatis-config.xml生效,需要将该文件的路径添加到全局配置文件application.properties(or application.yml)的配置中,如

application.properties
mybatis.config-location=classpath:mybatis-config.xml

在这里,我的mybatis-config.xml文件在resources目录下,因此使用路径classpath:mybatis-config.xml

mybatis 无法找到映射错误

mybatis 中报错:

Result Maps collection does not contain value for com.common.pojo.User

其中是因为在mapper.xml文件中的resultMap ,没有设置正确,没有将sql的列名与pojo类的属性名保持一致

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
Java 中的 Unsafe 魔法类的作用大全
Jun 26 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
Java基础之this关键字的使用
Jun 30 #Java/Android
Java图书管理系统,课程设计必用(源码+文档)
详解Java ES多节点任务的高效分发与收集实现
Jun 30 #Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 #Java/Android
总结Java对象被序列化的两种方法
Jun 30 #Java/Android
实体类或对象序列化时,忽略为空属性的操作
Jun 30 #Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 #Java/Android
You might like
PHP CURL获取返回值的方法
2014/05/04 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP实现的简单缓存类
2015/07/29 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vue二级路由设置方法
2018/02/09 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
Linux下python3.7.0安装教程
2018/07/30 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
零基础学python应该从哪里入手
2020/08/11 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
网络专业学生个人的自我评价
2013/12/16 职场文书
迎国庆横幅标语
2014/10/08 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
nginx服务器的下载安装与使用详解
2021/08/02 Servers
Log4j.properties配置及其使用
2021/08/02 Java/Android
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL