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

写在前面

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

(1)使用SELECT方法,排除字段"password"
java 复制代码
@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方法,只显示某些字段
java 复制代码
@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。

java 复制代码
@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 ?
相关推荐
xixingzhe210 分钟前
SpringBoot DDD 实战入门文档
spring boot·spring·ddd
杨运交2 小时前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
行者-全栈开发2 小时前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
Andya_net3 小时前
Spring Boot | 条件注解完全指南:从 @Conditional 到 @ConditionalOnExpression 的原理、实践与避坑
spring boot·后端·python
小荷才露尖尖角,早有蜻蜓立上头4 小时前
class java.util.LinkedHashMap cannot be cast to xxx
java·spring boot
MZA6664 小时前
Spring Boot 实战:基于自定义注解 + AOP 实现 Kafka 消息无侵入异步上送
java·spring boot·kafka
wxwx_bscxy3225 小时前
springboot巡更系统10192
java·spring boot·后端·巡更系统
爱折腾的编程老炮6 小时前
潮玩小程序订单模型-一张表装下所有玩法
spring boot·小程序·uni-app
BS30813_vx6 小时前
31754+基于 Spring Boot + Vue 的网络文学交流分享平台设计与实现
vue.js·spring boot·后端
摇滚侠7 小时前
《Spring Boot 3:高级与架构设计》第 2 章 IOC容器的高级机制 Environment 阅读笔记 4
spring boot·笔记·后端