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 相关文章推荐
在Java中Collection的一些常用方法总结
Jun 13 Java/Android
教你用Java在个人电脑上实现微信扫码支付
Jun 13 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Android开发实现极为简单的QQ登录页面
Apr 24 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
Java多线程并发FutureTask使用详解
Jun 28 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
php5.2.0内存管理改进
2007/01/22 PHP
PHP数据缓存技术
2007/02/14 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
巧用canvas
2017/01/21 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
javascript中函数的写法实例代码详解
2018/10/28 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
python中requests模块的使用方法
2015/04/08 Python
浅析python协程相关概念
2018/01/20 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python中is和==的区别详解
2018/11/15 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python实现复制文件到指定目录
2019/10/16 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
什么是抽象
2015/12/13 面试题
文体活动总结范文
2014/05/05 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
React四级菜单的实现
2022/04/08 Javascript