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 返回部分字段的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 mybatis-plus 返回部分字段的解决方式 的全部内容, 来源链接: utcz.com/z/335826.html

回到顶部