Springboot整合Mybatis字段命名问题
上次在调试微服务时,业务逻辑是要根据一个字段值从表中获取一整条数据,但取出数据时我发现有一个字段的值是空的,其他字段都正常取出了,很奇怪
看了下日志,从表中取出的确实是一条完整的记录,说明sql语句没问题:
但是取出后放在实体里后module字段就变成null了:
CheckPoint(checkPointId=2, module=null, url=http://172.31.197.98/notice/web/getPopUpMessage, status=1, createTime=Thu Dec 09 14:54:20 CST 2021)
我又仔细对照了一下resultMap也没看出来哪块名字没对上:
<resultMap id="BasicResultMap" type="com.alert.entity.CheckPoint">
<result column="check_point_id" jdbcType="BIGINT" property="checkPointId" />
<result column="check_point_module" jdbcType="VARCHAR" property="module" />
<result column="url" jdbcType="VARCHAR" property="url" />
<result column="status" jdbcType="TINYINT" property="status" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap>
查了半天才知道,因为我在mybatis-config里加了这句:
<setting name="mapUnderscoreToCamelCase" value="true"/>
这句会使数据表中的列名自动映射成驼峰命名,也就是说我的第二列check_point_module在存入实体类时会自动去找名叫checkPointModule的字段去存,而我的实体类里因为图方便就把这列命名为module了,因此也只有这一个字段没有找到对应的存储位置而显示为null。
解决方法
重新命名实体类中字段,严格与数据表中字段命名一致,例:
数据表 | 实力类 |
---|---|
check_point | checkPoint |
notice_message | noticeMessage |