mybatis-plus 出现仅返回部分字段的解决方法
创始人
2024-11-16 04:23:00
0次

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类

/**
 * 

* *

* * @author onee123 * @since 2019-03-03 */ @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("_manager") public class Manager extends Model { 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类

/**
 * 

* *

* * @author wihenne123 * @since 2020-04-24 */ @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("_seal") public class Seal extends Model { 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需要对应上面两个表。

/**
 * 

* *

* * @author wihenne123 * @since 2020-04-24 */ @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("_audit_process") public class AuditProcess extends Model { 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 出现仅返回部分字段的解决方法

/**
 * 

* 服务实现类 *

* * @author wihenne123 * @since 2020-04-23 */ @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; } }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...