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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值