软件编程
位置:首页>> 软件编程>> java编程>> mybatis-plus 返回部分字段的解决方式

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

作者:别问问就是报错  发布时间:2023-03-25 14:45:04 

标签: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类作为子类

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

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

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

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


/**
* <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;
 }
}

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

来源:https://blog.csdn.net/weixin_43358430/article/details/103734104

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com