项目使用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> {
}
用法
如何?这种视图的用法是否非常直观的增加了开发速度?如果有任何弊端欢迎评论告知,感谢。