mybatis Resolves Automatic Mapping Failure from Column Names to Attribute Names
- 2021-10-13 07:49:10
- OfStack
Problem background
When the data from the database is mapped to the entity class, only some attributes in the entity class are mapped successfully, and the other attributes are all null values.
Problem description
The following figure AreaDao. xml file describes the query process of the queryArea () method to obtain each attribute value of the Area object from the database, and the final query result shows that only the attribute priority is successfully assigned
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
The corresponding table tb_area in the database:
mysql> select * from tb_area;
+---------+-----------+----------+-------------+----------------+
| area_id | area_name | priority | create_time | last_edit_time |
+---------+-----------+----------+-------------+----------------+
| 1 | South Garden | 302 | NULL | NULL |
| 2 | Bei Yuan | 307 | NULL | NULL |
| 3 | East Court | 312 | NULL | NULL |
+---------+-----------+----------+-------------+----------------+
Cause
Attributes in the entity class Area use the hump naming convention and cannot match the column names of database tables by default
Area.java
public class Area {
private Integer areaId;
private String areaName;
private Integer priority;
private Date createTime;
private Date lastEditTime;
Exactly Exactly Exactly Exactly Exactly
}
Solution
Set mapUnderscoreToCamelCase to true in the configuration file mybatis-config. xml of mybatis. Please refer to the official documents for various attribute configurations of the configuration file mybatis-config. xml
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
Of course, for the file mybatis-config. xml to take effect, you need to add the path to the configuration of the global configuration file application. properties (or application. yml), as shown in
application.properties
mybatis.config-location=classpath:mybatis-config.xml
Here, my mybatis-config. xml file is in the resources directory, so use the path classpath: mybatis-config. xml
mybatis Unable to find mapping error
Error reported in mybatis:
Result Maps collection does not contain value for com.common.pojo.User
This is because resultMap in the mapper. xml file is not set correctly, and the column name of sql and the attribute name of pojo class are not kept as 1