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

网友投稿 813 2023-01-02

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

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

问题背景

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

问题描述

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

AreaDao.xml

SELECT area_id, area_name, priority, create_time, last_edit_time

FROM tb_area

ORDER BY priority

DESC

AreaDaoTest.java

Area area = areaDao.queryAreaById(3);

area = {Area@7489}

areaId = null

areaName = null

TMOwKNT priority = {Integer@7513} 312

createTime = null

lastEditTime = null

数据库中对应的表tb_area:

mysql> TMOwKNTselect * 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的各种属性配置可以参考官方文档

当然这还没完,为了让文件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类的属性名保持一致

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vue微信小程序组件(vue微信小程序开发)
下一篇:物联网厂商(物联网设备厂家供应商)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~