QueryWrapper 无法识别注解 @Ignore

QueryWrapper 无法识别注解 @Ignore问题

在实体类中,有时会为了业务需求而引入别的类作为属性值。
此时就要添加@Ignore注解,如下所示。使用该注解的属性会被 MyBatis-Plus 在执行数据库操作时忽略。这意味着其不会参与任何 INSERT 或 UPDATE 操作,也不会在 SELECT 查询中被映射。

@TableName("user")
public class User {
    // 主键id 自增
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField(value = "uid")
    private String uid;

    @TableField(value = "name")
    private String name;

    // 引入course类
    @Ignore
    private course userCourse;
}

但当我们使用QueryWrapper进行查询时:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("uid", uid);
List<User> userList = userMapper.selectList(queryWrapper);

会发现,QueryWrapper并不识别@Ignore注解,并将userCourse视作数据库中的一列,从而报错列名'user_course' 无效
为了解决这个问题,我们需要在构建QueryWrapper时手动排除userCourse字段,如下所示。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("uid", uid);
queryWrapper.select(User.class, info -> !info.getColumn().equals("user_course"));
List<User> userList = userMapper.selectList(queryWrapper);

这样就可以忽略userCourse属性,实现正常的查询。

注意:报错为user_course,且我们去除元素时也设定去除字段为user_course,而非userCourse。这是因为 MyBatis-Plus 会根据默认映射,在 Java 属性名和数据库列名之间进行转换。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值