栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis-plus 返回部分字段的解决方式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis-plus 返回部分字段的解决方式

mybatis-plus的代码生成器会在实体类中生成数据库所有字段,我们去用mapper接口查询时,会返回数据库所有的字段。

但有些字段不是我们想要的,比如:deleted,所以我们可以在不需要的字段上面加@JsonIgnore注解,返回给前端的时候会自动把这个字段去除。

补充知识:Mybatis-Plus只查询特定字段与创建子类方法

Mybatis-Plus查询特定字段例子:

Seal seal = sealService.selectOne(

new EntityWrapper().setSqlSelect("sealName").eq("sealId",auditProcess.getSealId()));

其中这里的seal是一个自定义类。"sealName"是数据库表seal的一个字段,这句查询只查到id为 auditProcess.getSealId() 的seal的名称。其余字段为null

创建子类方法。

一般需要联表的情况,又不想写sql语句,可以试下这种方法(至于效率,我也没有测试过)

上个例子

Manager类


@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_manager")
public class Manager extends Model {
 
  private static final long serialVersionUID = 1L;
 
  
  @TableId(value = "manager_id",type = IdType.UUID)
  private String managerId;
  
  @TableField("manager_phone")
  private String managerPhone;
  
  @TableField("manager_pass")
  private String managerPass;
  
  @TableField("manager_name")
  private String managerName;
  
  @TableField("manager_email")
  private String managerEmail;
  
  @TableField("manager_status")
  private Integer managerStatus;
  
  @TableField("role_id")
  private String roleId;
  
  @TableField("manager_department")
  private String managerDepartment;
  
  @TableField("manager_create_time")
  private Date managerCreateTime;
  
  @TableField("manager_login_time")
  private Date managerLoginTime;
 
 
  @Override
  protected Serializable pkVal() {
    return this.managerId;
  }
 
}

Seal类


@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_seal")
public class Seal extends Model {
 
  private static final long serialVersionUID = 1L;
 
  
  @TableId(value="seal_id",type = IdType.UUID)
  private String sealId;
  
  @TableField("seal_name")
  private String sealName;
  
  @TableField("picture_path")
  private String picturePath;
  
  @TableField("create_time")
  private Date createTime;
  
  @TableField("update_time")
  private Date updateTime;
  
  @TableField("seal_status")
  private Integer sealStatus; 
 
  @Override
  protected Serializable pkVal() {
    return this.sealId;
  } 
}

AuditProcess类,其中managerId和sealId需要对应上面两个表。


@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_audit_process")
public class AuditProcess extends Model {
 
  private static final long serialVersionUID = 1L;
 
  
  @TableId(value = "audit_id", type = IdType.AUTO)
  private Integer auditId;
  
  @TableField("audit_name")
  private String auditName;
  
  @TableField("audit_sort")
  private String auditSort;
  
  @TableField("audit_status")
  private Integer auditStatus;
  
  @TableField("create_time")
  private Date createTime;
  
  @TableField("update_time")
  private Date updateTime;
  
  @TableField("seal_id")
  private String sealId;
  
  @TableField("manager_id")
  private String managerId;
  
  @TableField("seal_x")
  private Double sealX;
  
  @TableField("seal_y")
  private Double sealY;
  
  @TableField("seal_size")
  private Double sealSize;
  
  @TableField("seal_page")
  private Integer sealPage;
  
  @TableField("num_x")
  private Double numX;
  
  @TableField("num_y")
  private Double numY;
  
  @TableField("num_size")
  private Double numSize;
  
  @TableField("num_page")
  private Integer numPage;
  
  @TableField("pdf_demo_path")
  private String pdfDemoPath;
  
  @TableField("result_file_path")
  private String resultFilePath;
  
  @TableField("print_size")
  private Integer printSize;
 
 
  @Override
  protected Serializable pkVal() {
    return this.auditId;
  }
 
}

这时候我只需要对应id的类的名称,所以我设置了vo类作为子类

然后在接口里面写转换方法


@Service
public class AuditProcessServiceImpl extends ServiceImpl implements AuditProcessService {
  @Autowired
  ManagerService managerService;
  @Autowired
  SealService sealService;
  @Autowired
  AuditProcessService auditProcessService;
 
  @Override
  public List auditProcessToVo(List auditProcessList) {
    List auditProcessVos = new ArrayList<>();
    for(AuditProcess auditProcess:auditProcessList){
      //遍历list
      auditProcessVos.add(auditProcessToVo(auditProcess));
    }
    return auditProcessVos;
  }
 
  @Override
  public AuditProcessVo auditProcessToVo(AuditProcess auditProcess) {
    AuditProcessVo auditProcessVo = new AuditProcessVo();
    BeanUtils.copyProperties(auditProcess,auditProcessVo); //复制进vo类
 
    Manager manager = managerService.selectOne(
 new EntityWrapper().setSqlSelect("manager_name","manager_department").eq("manager_id",auditProcess.getManagerId()));
    //加入字段值
    auditProcessVo.setManagerName(manager.getManagerName());
    auditProcessVo.setManagerDepartment(manager.getManagerDepartment());
 
    if(auditProcess.getSealId() != null){
      Seal seal = sealService.selectOne(
   new EntityWrapper().setSqlSelect("seal_name").eq("seal_id",auditProcess.getSealId()));
      if(seal != null){
 auditProcessVo.setSealName(seal.getSealName());
      }
    }else {
      auditProcessVo.setSealName("无");
    }
 
    return auditProcessVo;
  }
}

再想调用时直接调用就可以了

以上这篇mybatis-plus 返回部分字段的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/131307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号