問題背景
從數(shù)據(jù)庫中取出數(shù)據(jù)映射到實體類時,實體類中只有部分屬性映射成功,其余屬性值皆為null。
問題描述
如下圖AreaDao.xml文件中描述了queryArea()方法從數(shù)據(jù)庫獲取Area對象的各個屬性值的查詢過程,最后執(zhí)行查詢結果顯示只有屬性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
數(shù)據(jù)庫中對應的表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中的屬性使用的是駝峰命名規(guī)則,默認情況下無法與數(shù)據(jù)庫表的列名相匹配
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