使用Mybatis-plus通过自定义Sql查询只有主键为null的问题
最近我在通过在XML文件中自定义SQl的时候,遇到了一个奇怪的问题。
数据库表(tab_user)结构如下:
实体如下:
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Data
@TableName(value = "tab_user")
public class User implements Serializable {
@TableId(value = "pk_user_id",type = IdType.AUTO)
private Integer userId;
private String userName;
private String userSex;
}
定义的Mapper如下:
<select id="selectAllbySex" resultTyep="cn.entity.User">
SELECT * FROM tab_user ${ew.customSqlSegment}
</select>
使用继承于BaseMapper<T>
中的方法都是正常的,没有问题。
但自定义sql查询回来的其他属性皆是正常的,唯独主键(与列名不一致)为null。
这个问题非常奇怪但是又非常严重,主键没了这可咋整阿!于是转头去看控制台产生的打印的sql语句,发现Sql语句里是有userId
这个属性的。
所以,问题非常明显出在了查询结果映射到实体这一环节。
但是,我明明已经为主键添加了@TableId
注解,否则继承于BaseMapper<T>
的方法也不可能正常执行,我百思不得其解。
搜索了好几个关键字也没找到类似的问题,直到我点开了MybatisPuls
官方的github
地址,发现了这样一个issue。
地址:https://github.com/baomidou/mybatis-plus/issues/3976
大概看了一下,这位大兄弟和我及其相似的遭遇,不同的是他是非主键属性,我是主键属性,并且他和我都是属性名与列名不同。
当我看到了这里时,我瞬间豁然开朗....
我靠!!!这不就是我告诉张三他表哥他妈穿红色衣服,然后我去问张三他妈穿的啥颜色衣服吗?
于是问题解决了,在不能修改表名的情况下(建议列名和属性名一致,或者满足驼峰命名法,如pk_user_id
则为pkUserId
,下划线转驼峰需要在配置文件中application.properties
添加mybatis.configuration.map-underscore-to-camel-case=true
)
告诉mybatis
映射关系就好。
修改xml的内容如下:
<select id="selectAllbySex" resultMap="userResultMap">
SELECT * FROM tab_user ${ew.customSqlSegment}
</select>
添加映射关系:
<resultMap id="userResultMap" type="cn.entity.User">
<id column="pk_user_id" property="userId"></id>
</resultMap>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧