Mybatis框架之解决列名(表中的字段名称)和实体类中的属性名不一致

当使用MyBatis查询数据库时,若数据库字段与POJO属性名不一致,如数据库字段user_name与POJO属性userName,会导致查询结果无法正确填充。本文介绍了解决此问题的三种方法:使用SQL别名、驼峰匹配配置与自定义resultMap。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询数据的时候,查不到userName的信息,原因:数据库的字段名是user_name,而POJO中的属性名字是userName
两端不一致,造成mybatis无法填充对应的字段信息。修改方法:在sql语句中使用别名
解决方案1:在sql语句中使用别名
解决方案2:参考驼峰匹配 — mybatis-config.xml 的时候



解决方案3:resultMap自定义映射
示例:
步骤一:将驼峰匹配注释掉
一旦注释掉驼峰匹配,那么再通过queryUserById查询的结果中,用户名就无法封装了,此时我们可以尝试使用ResultMap来解决这个问题。

在这里插入图片描述步骤二:在UserMapper.xml中配置resultMap

<resultMap type="User" id="userResultMap" autoMapping="true">
	<!-- id标签:配置主键映射,column:表中的字段名称,property:属性名称 -->
	<id column="id" property="id"/>
	<!-- 可以用来配置普通类型字段和属性映射(非复杂类型) -->
	<result column="user_name" property="userName"/>
</resultMap>
步骤三:在statement中引用自定义resultMap
<!-- 
	select:查询的statement,用来编写查询语句。
	id:语句的唯一标识,使用动态代理之后,必须和mapper接口中的方法名称一致。
	resultType:配置返回的结果集类型
	parameterType:参数类型,可以省略。
 -->
select * from tb_user where id = #{id} 测试无误 注意:测试完记得将驼峰命名的配置重新开启,因为其他的测试方法还要用。 **resultMap的自动映射** 在上面讲到的resultMap中,主键需要通过id子标签配置,表字段和属性名不一致的普通字段需要通过result子标签配置。 那么,字段和属性名称都匹配的字段要不要配置?

这个取决于resultMap中的autoMapping属性的值:
为true时:resultMap中的没有配置的字段会自动对应。如果不配置,则默认为true。
为false时:只针对resultMap中已经配置的字段作映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值