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

 更新时间:2020年10月01日 11:56:58   作者:别问问就是报错  
这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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

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

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

Seal seal = sealService.selectOne(

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

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

创建子类方法。

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

上个例子

Manager类

/**
 * <p>
 * 
 * </p>
 *
 * @author onee123
 * @since 2019-03-03
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_manager")
public class Manager extends Model<Manager> {
 
  private static final long serialVersionUID = 1L;
 
  /**
   * 管理员id
   */
  @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;
  /**
   * 状态(0:1-删除:启动)
   */
  @TableField("manager_status")
  private Integer managerStatus;
  /**
   * 权限id
   */
  @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类

/**
 * <p>
 * 
 * </p>
 *
 * @author wihenne123
 * @since 2020-04-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_seal")
public class Seal extends Model<Seal> {
 
  private static final long serialVersionUID = 1L;
 
  /**
   * 印章id
   */
  @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;
  /**
   * (-1:0:1 - 删除:停用:启用)
   */
  @TableField("seal_status")
  private Integer sealStatus; 
 
  @Override
  protected Serializable pkVal() {
    return this.sealId;
  } 
}

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

/**
 * <p>
 * 
 * </p>
 *
 * @author wihenne123
 * @since 2020-04-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_audit_process")
public class AuditProcess extends Model<AuditProcess> {
 
  private static final long serialVersionUID = 1L;
 
  /**
   * 流程图id
   */
  @TableId(value = "audit_id", type = IdType.AUTO)
  private Integer auditId;
  /**
   * 流程名称
   */
  @TableField("audit_name")
  private String auditName;
  /**
   * 审核顺序(,隔开-店长用shopManager表示)
   */
  @TableField("audit_sort")
  private String auditSort;
  /**
   * 状态(-1:0:1-删除:停用:启用)
   */
  @TableField("audit_status")
  private Integer auditStatus;
  /**
   * 创建时间
   */
  @TableField("create_time")
  private Date createTime;
  /**
   * 更新时间
   */
  @TableField("update_time")
  private Date updateTime;
  /**
   * 印章id(无则为0)
   */
  @TableField("seal_id")
  private String sealId;
  /**
   * 创建人id
   */
  @TableField("manager_id")
  private String managerId;
  /**
   * 印章x位置
   */
  @TableField("seal_x")
  private Double sealX;
  /**
   * 印章y位置
   */
  @TableField("seal_y")
  private Double sealY;
  /**
   * 印章大小
   */
  @TableField("seal_size")
  private Double sealSize;
  /**
   * 印章所在页码
   */
  @TableField("seal_page")
  private Integer sealPage;
  /**
   * 序号x位置
   */
  @TableField("num_x")
  private Double numX;
  /**
   * 序号y位置
   */
  @TableField("num_y")
  private Double numY;
  /**
   * 序号大小
   */
  @TableField("num_size")
  private Double numSize;
  /**
   * 序号所在页码
   */
  @TableField("num_page")
  private Integer numPage;
  /**
   * pdf文件demo路径
   */
  @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类作为子类

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

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wihenne123
 * @since 2020-04-23
 */
@Service
public class AuditProcessServiceImpl extends ServiceImpl<AuditProcessMapper, AuditProcess> implements AuditProcessService {
  @Autowired
  ManagerService managerService;
  @Autowired
  SealService sealService;
  @Autowired
  AuditProcessService auditProcessService;
 
  @Override
  public List<AuditProcessVo> auditProcessToVo(List<AuditProcess> auditProcessList) {
    List<AuditProcessVo> 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<Manager>().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<Seal>().setSqlSelect("seal_name").eq("seal_id",auditProcess.getSealId()));
      if(seal != null){
        auditProcessVo.setSealName(seal.getSealName());
      }
    }else {
      auditProcessVo.setSealName("无");
    }
 
    return auditProcessVo;
  }
}

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

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

相关文章

  • Java经典面试题汇总:Spring Boot

    Java经典面试题汇总:Spring Boot

    本篇总结的是Spring-Boot框架相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢
    2021-07-07
  • java开源区块链jdchain入门

    java开源区块链jdchain入门

    这篇文章主要介绍了java开源区块链jdchain入门,文中为大家讲解了关于部署及组件遇到的一些问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • Spring Security自定义认证器的实现代码

    Spring Security自定义认证器的实现代码

    这篇文章主要介绍了Spring Security自定义认证器的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • java实现模拟USB接口的功能

    java实现模拟USB接口的功能

    本文主要介绍了java实现模拟USB接口的功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java数据结构之并查集的实现

    Java数据结构之并查集的实现

    并查集是一种用来管理元素分组情况的数据结构。并查集可以高效地进行如下操作。本文将通过Java实现并查集,感兴趣的小伙伴可以了解一下
    2022-01-01
  • 基于JDK8总结java中的interrupt

    基于JDK8总结java中的interrupt

    本文是基于JDK8总结java中的interrupt知识,需要的朋友可以参考下
    2017-12-12
  • idea中如何配置tomcat

    idea中如何配置tomcat

    这篇文章主要介绍了idea中如何配置tomcat问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java压缩解压缩工具类

    Java压缩解压缩工具类

    这篇文章主要为大家详细介绍了Java压缩解压缩工具类,如何压缩单个文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Java中的异常处理用法及其架构和使用建议

    Java中的异常处理用法及其架构和使用建议

    Java同样也提供了抛出异常、捕捉异常和finally语句的使用来处理程序异常,下面就来具体看一下Java中的异常处理用法及其架构和使用建议:
    2016-06-06
  • Spring Boot + Canal 实现数据库实时监控

    Spring Boot + Canal 实现数据库实时监控

    这篇文章主要介绍了Spring Boot + Canal实现数据库实时监控,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论