SpringBoot - MyBatis-Plus - 如何在查询时排除某些字段?

文章介绍了在Java后端开发中,使用MyBatis-Plus框架时如何处理不向前端展示某些敏感字段,如password和salary。方法包括使用SELECT语句排除字段,或者仅选择需要展示的字段。此外,还提到了使用@TableField(exist=false)注解来忽略特定字段,以保护数据隐私。

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

写在前面

查询时部分字段不想给前端显示,怎么办?

(1)使用SELECT方法,排除字段"password"
@Override
public Page<UserDO> list(String name, Integer status, Integer pageNo, Integer limit, Long adminId) throws ServiceException {
    QueryWrapper<UserDO> wrapper = new QueryWrapper<>();
    if (!ObjectUtils.isEmpty(name)) {
        wrapper.like("name", name);
    }
    if (status != null) {
        wrapper.eq("status", status);
    }
    wrapper.select(UserDO.class, user -> !user.getColumn().equals("password") && !user.getColumn().equals("salary"));
    wrapper.orderByDesc("id");
    return userMapper.selectPage(Page.div(pageNo, limit, UserDO.class), wrapper);
}

// 生成的SQL语句为:
SELECT id,presenter,qq,wx,mail,name,id_no,id_card_front,id_card_back,phone,
salt,ali_mp_open_id,wx_mp_open_id,wx_h5_open_id,wx_app_open_id,nickname,
avatar_url,province,city,county,level,gmt_vip_expire,birthday,gender,gmt_last_login,
last_login_ip,status,gmt_update,gmt_create 
FROM mcsx_user ORDER BY id DESC LIMIT ?

(2)使用SELECT方法,只显示某些字段
@Override
public Page<UserDO> list(String name, Integer status, Integer pageNo, Integer limit, Long adminId) throws ServiceException {
    QueryWrapper<UserDO> wrapper = new QueryWrapper<>();
    if (!ObjectUtils.isEmpty(name)) {
        wrapper.like("name", name);
    }
    if (status != null) {
        wrapper.eq("status", status);
    }
    wrapper.select("id", "name", "level", "qq", "wx", "gmt_last_login");
    wrapper.orderByDesc("id");
    return userMapper.selectPage(Page.div(pageNo, limit, UserDO.class), wrapper);
}

// 生成的SQL语句为:
SELECT id,name,level,qq,wx,gmt_last_login FROM mcsx_user ORDER BY id DESC LIMIT ?

(3)使用@TableField(exist = false),排除某些字段

注:表示当前属性不是数据库的字段,但在项目中必须使用,这样的话在新增/查询等使用BEAN时,MyBatis-Plus都会忽略这个属性,所以推荐使用方法1和方法2。

@Data
@ApiEntity(description = "用户领域模型表")
@TableName("mcsx_user")
public class UserDO extends SuperDO {

    @ApiField(description = "推荐者")
    private Long presenter;

    @TableField(exist = false)
    @ApiField(description = "QQQQ号")
    private String qq;

    @TableField(exist = false)
    @ApiField(description = "微信号")
    private String wx;
    @ApiField(description = "电子邮箱")
    private String mail;
    @ApiField(description = "姓名")
    private String name;
    @ApiField(description = "身份证号")
    private String idNo;
    
    ...
}

// 生成的SQL语句为:
SELECT id,presenter,mail,name,id_no,id_card_front,id_card_back,phone,
salt,ali_mp_open_id,wx_mp_open_id,wx_h5_open_id,wx_app_open_id,nickname,
avatar_url,province,city,county,level,gmt_vip_expire,birthday,gender,gmt_last_login,
last_login_ip,status,gmt_update,gmt_create FROM mcsx_user ORDER BY id DESC LIMIT ?

### 回答1: 柴油机发送故障码SPN,是指柴油机控制模块记录的故障代码。SPN是Diagnostic Trouble Code的缩写,意思是故障诊断码。当某个传感器或执行器发生故障,控制模块会记录相应的SPN码,以便进行故障诊断和修理。 SPN码通常有三位数字,例如SPN 3251。这个代码告诉技术人员出现了什么问题。通过读取SPN码可以确定问题的位置或性质,例如发动机是否失火、某个传感器是否故障、是否存在排放问题等。根据SPN码,技术人员可以更快地定位故障并进行修理,从而缩短维修间和成本。 因此,当柴油机发送故障码SPN,建议及解决问题,避免故障扩大或影响其他部件的正常工作。对于普通用户而言,了解SPN码意义也是非常有帮助的,可以更好地了解车辆故障症状并及早找到解决方法。 ### 回答2: "SPN"代表故障代码清单,是指示柴油机的故障指示符。如果柴油机发出SPN故障代码,这意味着发动机识别出了一个错误,需要进行检查和维修。SPN代码通常可以通过故障指示灯或柴油机上的显示器来检测。它们从0到65535的数字范围内。一旦检测到SPN故障码,我们需要根据故障代码手册来查找对应的解决方案。一些SPN故障码可能需要紧急处理,例如低油压或高水温等,应立即停机进行维修。而对于其他的故障,则可以在稍后的间进行检查和修理。维修人员应该对各种SPN故障码有所了解,以便能够快速准确地检测和维修柴油机,避免进一步的损坏和停机间的增加。 ### 回答3: 柴油机发送故障码SPN表示某个传感器或控制模块检测到了一个故障或异常信号。SPN是故障码中的一部分,通常由4位数字组成。每个SPN码都代表了不同类型的故障或问题,这些问题可能涉及到引擎、排放、传动或其他系统的功能。 故障码SPN通常会导致车辆性能下降或故障,例如可燃物质排放过高、加速不足或启动困难等。当故障码SPN出现,车主应该及处理,以防对引擎和其他系统造成额外的伤害。 处理故障码SPN所需的措施取决于具体的问题和所涉及的系统。如果您没有相关技能和工具,最好将车辆交给有经验的专业人士进行检修。他们通常有足够的知识和工具来帮助您解决故障码SPN出现的问题,使您的柴油机回复到正常状态。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值