如何处理Mybatis中selectById()方法因主键不一致引发的查询问题?

2026-05-16 07:372阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计488个文字,预计阅读时间需要2分钟。

如何处理Mybatis中selectById()方法因主键不一致引发的查询问题?

Mybatis-plus的通用Mapper封装了多种方法,只需将interface集成BaseMapper即可。BaseMapper中包含了一个方法:selectById(),根据id查询记录。

Mybatis-plus的通用mapper为我们封装了很多方法,我们只需要将interface集成BaseMapper就可以。在BaseMapper中分装了一个方法=》selectById()

selectById

这个方法是根据主键id进行查询记录的。返回一条记录。测试如下,

最终调用的是这个方法userDiamondMapper这个接口集成了BaseMapper。

注意这个表的主键就是uid,查询试试

如何处理Mybatis中selectById()方法因主键不一致引发的查询问题?

返回结果不如我们预期,打印出的SQL很奇怪,并没有解析正确。猜测是因为无法正确解析出主键。

改一下,使用注解标记一下主键

使用@TableId注解标记主键id为uid,重试下

这次终于正确了

注意:selectById方法默认使用的主键名是id,数据库表中如果主键id名称不一样需要手动指定

补充知识:MyBatis-Plus 踩坑 ,getById查询无效

使用AutoGenerator(AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码)生成代码后,在Controller中使用Service的getById()进行查询,返回的对象居然是null

问题出在Entity上,由于我数据表的id字段名为id且int类型,自动生成的id字段名serialVersionUID且类型为long类型,与数据库表对不上号。

使用getById(id)查询自然为null

因为entity生成出来的主键没注意到是不符合数据表的

所以解决方法是,把主键改成数据表对应的:把主键id字段名改回id,且数据类型设置int

@Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("board_parent") public class Parent extends BaseEntity { //private static final long serialVersionUID = 1L; private int id; @NotEmpty(message = "父论坛名不能为空!") private String name; @NotNull(message = "管理员ID不能为空!") private Integer adminId; public LocalDateTime createdDate; public LocalDateTime updateDate; public Integer state; }

以上这篇解决Mybatis查询方法selectById()主键不一致问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

本文共计488个文字,预计阅读时间需要2分钟。

如何处理Mybatis中selectById()方法因主键不一致引发的查询问题?

Mybatis-plus的通用Mapper封装了多种方法,只需将interface集成BaseMapper即可。BaseMapper中包含了一个方法:selectById(),根据id查询记录。

Mybatis-plus的通用mapper为我们封装了很多方法,我们只需要将interface集成BaseMapper就可以。在BaseMapper中分装了一个方法=》selectById()

selectById

这个方法是根据主键id进行查询记录的。返回一条记录。测试如下,

最终调用的是这个方法userDiamondMapper这个接口集成了BaseMapper。

注意这个表的主键就是uid,查询试试

如何处理Mybatis中selectById()方法因主键不一致引发的查询问题?

返回结果不如我们预期,打印出的SQL很奇怪,并没有解析正确。猜测是因为无法正确解析出主键。

改一下,使用注解标记一下主键

使用@TableId注解标记主键id为uid,重试下

这次终于正确了

注意:selectById方法默认使用的主键名是id,数据库表中如果主键id名称不一样需要手动指定

补充知识:MyBatis-Plus 踩坑 ,getById查询无效

使用AutoGenerator(AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码)生成代码后,在Controller中使用Service的getById()进行查询,返回的对象居然是null

问题出在Entity上,由于我数据表的id字段名为id且int类型,自动生成的id字段名serialVersionUID且类型为long类型,与数据库表对不上号。

使用getById(id)查询自然为null

因为entity生成出来的主键没注意到是不符合数据表的

所以解决方法是,把主键改成数据表对应的:把主键id字段名改回id,且数据类型设置int

@Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("board_parent") public class Parent extends BaseEntity { //private static final long serialVersionUID = 1L; private int id; @NotEmpty(message = "父论坛名不能为空!") private String name; @NotNull(message = "管理员ID不能为空!") private Integer adminId; public LocalDateTime createdDate; public LocalDateTime updateDate; public Integer state; }

以上这篇解决Mybatis查询方法selectById()主键不一致问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。