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算法实现红黑树完整代码示例

    java算法实现红黑树完整代码示例

    这篇文章主要介绍了java算法实现红黑树完整代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Flyway详解及Springboot集成Flyway的详细教程

    Flyway详解及Springboot集成Flyway的详细教程

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里。这篇文章主要介绍了Flyway详解及Springboot集成Flyway的详细教程的相关资料,需要的朋友可以参考下
    2020-07-07
  • Java CopyOnWriteArrayList源码超详细分析

    Java CopyOnWriteArrayList源码超详细分析

    为了将读取的性能发挥到极致,jdk中提供了CopyOnWriteArrayList类,下面这篇文章主要给大家介绍了关于java中CopyOnWriteArrayList源码解析的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Java中对象的创建和销毁过程详析

    Java中对象的创建和销毁过程详析

    这篇文章主要介绍了Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机制负责,文中介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Spring学习之依赖注入的方法(三种)

    Spring学习之依赖注入的方法(三种)

    本篇文章主要介绍了Spring学习之依赖注入的方法(三种),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • springboot中使用jpa下hibernate的ddl-auto方式

    springboot中使用jpa下hibernate的ddl-auto方式

    这篇文章主要介绍了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java中的ProcessBuilder类详细解析

    Java中的ProcessBuilder类详细解析

    这篇文章主要介绍了Java中的ProcessBuilder类详细解析,ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程的方法,需要的朋友可以参考下
    2024-01-01
  • 详解IDEA用maven创建springMVC项目和配置

    详解IDEA用maven创建springMVC项目和配置

    本篇文章主要介绍了详解IDEA用maven创建springMVC项目和配置 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Spring Boot项目如何同时支持HTTP和HTTPS协议的实现

    Spring Boot项目如何同时支持HTTP和HTTPS协议的实现

    这篇文章主要介绍了Spring Boot项目如何同时支持HTTP和HTTPS协议的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题

    解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题

    这篇文章主要介绍了解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论