Mybatis-Plus:几个好的用法

项目使用mybatis-plus,同事的用法让我很难苟同,于是自己百度了一些用法,分享一下。

一、静态适配器

最好使用官方提供的ObjectUtils,比较全面,不用加载不同的对象工具。
com.baomidou.mybatisplus.core.toolkit

    /**
     * 设置查询适配器
     *
     * @param req 分页请求参数
     * @return 查询
     */
    private static QueryWrapper<EscrowKeyEntity> setWrapper(PageAsymKeyReqDTO req) {
        QueryWrapper<EscrowKeyEntity> wrapper = new QueryWrapper<>();
        wrapper.eq(ObjectUtils.isNotEmpty(req.getKeyId()), "key_id", req.getKeyId());
        wrapper.eq(ObjectUtils.isNotEmpty(req.getAlias()), "alias", req.getAlias());
        wrapper.eq(ObjectUtils.isNotNull(req.getKeyUsage()), "key_usage", req.getKeyUsage());
        wrapper.eq(ObjectUtils.isNotNull(req.getStatus()), "status", req.getStatus());
        wrapper.eq(ObjectUtils.isNotEmpty(req.getKeySpec()), "key_spec", req.getKeySpec());
        wrapper.orderByDesc("key_id");
        return wrapper;
    }

二、分页

自带的分页参数是“请求、响应同体”的
我们项目的响应参数是规定好的,所以需要自定义分页参数

自定义分页对象

@Data
public class Pager {

    @Schema(description = "页大小,默认10")
    @Max(value = 1000)
    private long rows = 10;

    /**
     * 当前页
     */
    @Schema(description = "当前页,默认1")
    @Max(value = 1000)
    private long page = 1;

}

分页用法示例
在这里插入图片描述

BeanCopyUtil.copyListProperties 是对象复制工具

    @Override
    public PageResult<EscrowKeyEntityVO> pageAsymKey(PageAsymKeyReqDTO reqDTO) {
        log.info("PageAysmKeyReqDTO : {}", reqDTO);
        Page<EscrowKeyEntity> page = new Page<>(reqDTO.getPage(), reqDTO.getRows());
        // 查询
        QueryWrapper<EscrowKeyEntity> wrapper = setWrapper(reqDTO);
        List<EscrowKeyEntity> records = escrowKeyService.list(page, wrapper);
        // 视图
        List<EscrowKeyEntityVO> list = BeanCopyUtil.copyListProperties(records, EscrowKeyEntityVO::new, (t, s) -> {
            // 公钥
            s.setPublicKeyStr(new String(t.getPublicKey(), StandardCharsets.UTF_8));
        });
        // 组合
        PageResult<EscrowKeyEntityVO> pageResult = new PageResult<>(page.getTotal(), list);
        log.info("PageResult<EscrowKeyEntityVO> : {}", pageResult);
        return pageResult;
    }

三、视图:复合查询的二级用法(减少sql代码)

视图在JAVA中可以当一个逻辑表使用,极大的减少sql代码的编码量。
个人一般使用Navicat Premium 工具生成MySQL的视图,如下

在这里插入图片描述
最终SQL

在这里插入图片描述
自动生成实体类
复制SQL查询语句,使用sql转JAVA实体(entity)在线工具生成实体。
推荐地址:代码生成工具地址
在这里插入图片描述视图对象在这里插入图片描述
Mapper.xml文件
mybatis-plus 可以在有需要的时候写mapper.xml文件,个人一般不写。
Mapper.java文件

public interface ViewDeviceExtMapper extends BaseMapper<ViewDeviceExtEntity> {

}

用法
在这里插入图片描述
如何?这种视图的用法是否非常直观的增加了开发速度?如果有任何弊端欢迎评论告知,感谢。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*crzep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值