Open AuroraLove opened 4 months ago
1.拉取过了测试性能demo的案例,经过测试确实性能优于mybatisplus 2.准备将现有项目工程切入flex,根据文档说明,某一具体业务类切成flex的实现,发现并没有demo案例出现的性能差异效果,结果均弱于plus 3.测试说明:本地测试环境,postgresql数据库,springboot2.5.3,jdk11,flex版本:1.8.9,mybatisplus 版本:3.5.3,pagehelper:1.4.3;主要测试分页查询性能,所有环境均一致,仅切换了ORM框架 4.测试数据:单表录入模拟数据 14460039 5.测试结果: a>plus: b>flex: 10次测试结果均于上图类似不再过多展示 6.相关测试用例代码: flex:
....................... log.info("----------------start2----------------------------"); long currentTimeMillis = System.currentTimeMillis(); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select(ACTION.DEFAULT_COLUMNS).from(ACTION); queryWrapper.and(ACTION.ID.eq(filter.getId(),If::hasText)); queryWrapper.and(ACTION.ID.in(filter.getIds(),If::isNotEmpty));
if (ObjectUtils.isNotEmpty(filter.getUser())){ queryWrapper.and(ACTION.USER_ID.eq(filter.getUser().getId(), If::hasText)); } queryWrapper.and(ACTION.USER_ID.in(filter.getUserIds(), If::isNotEmpty)); if (ObjectUtils.isNotEmpty(filter.getPos())){ queryWrapper.and(ACTION.POS_ID.eq(filter.getPos().getId(), If::hasText)); if (ObjectUtils.isNotEmpty(filter.getPos().getType())) { queryWrapper.and(ACTION.POS_OTYPE.eq(filter.getPos().getType().getOtid(), If::notNull)); } } if (ObjectUtils.isNotEmpty(filter.getObj())){ queryWrapper.and(ACTION.OBJ_ID.eq(filter.getObj().getId(), If::hasText)); if (ObjectUtils.isNotEmpty(filter.getObj().getType())){ queryWrapper.and(ACTION.OBJ_TYPE.eq(filter.getObj().getType().getOtid(), If::notNull)); } if (ObjectUtils.isNotEmpty(filter.getObj().getName())){ queryWrapper.and(ACTION.OBJ_NAME.like(filter.getObj().getName(), If::hasText)); } } if (ObjectUtils.isNotEmpty(filter.getKeyword())) { queryWrapper.and(ACTION.OBJ_NAME.like(filter.getKeyword()).or(ACTION.RESULT_NAME.like(filter.getKeyword()))); } queryWrapper.and(ACTION.OBJ_ID.in(objIds,If::isNotEmpty)); if (ObjectUtils.isNotEmpty(filter.getEquals()) || ObjectUtils.isNotEmpty(filter.getRanges()) || ObjectUtils.isNotEmpty(filter.getContains())) { String jsonbQuery = filter.toJsonbSql().toSql(); if (ObjectUtils.isNotEmpty(jsonbQuery)){ queryWrapper.and(jsonbQuery); } } if (ObjectUtils.isNotEmpty(filter.getResult())){ queryWrapper.and(ACTION.RESULT_ID.eq(filter.getResult().getId(), If::hasText)); if (ObjectUtils.isNotEmpty(filter.getResult().getType())){ queryWrapper.and(ACTION.RESULT_TYPE.eq(filter.getResult().getType().getOtid(), If::notNull)); } if (ObjectUtils.isNotEmpty(filter.getResult().getName())){ queryWrapper.and(ACTION.RESULT_NAME.like(filter.getResult().getName(), If::hasText)); } } queryWrapper.and(ACTION.CREATE_TIME.ge(filter.getStartTime(),If::notNull)); queryWrapper.and(ACTION.CREATE_TIME.le(filter.getEndTime(),If::notNull)); queryWrapper.and(ACTION.ACTION_TYPE_ID.eq(filter.getActionTypeId(),If::notNull)); queryWrapper.and(ACTION.ACTION_TYPE_ID.in(filter.getActionTypeIds(),If::isNotEmpty)); queryWrapper.orderBy(ACTION.UPDATE_TIME.desc()); Page<ActionPO> pageRequest = page(new Page<>(filter.getPageNum(),filter.getPageSize()),queryWrapper); log.info("list2 10-->:{}", System.currentTimeMillis() - currentTimeMillis);
plus: log.info("----------------start----------------------------"); long currentTimeMillis = System.currentTimeMillis(); Page pageRequest = SqlBuilders.page(filter); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); if (ObjectUtils.isNotEmpty(filter.getUser())){ lambdaQueryWrapper.eq(ActionPO::getUserId,filter.getUser().getId()); } if (ObjectUtils.isNotEmpty(filter.getId())){ lambdaQueryWrapper.eq(ActionPO::getId,filter.getId()); } if (ObjectUtils.isNotEmpty(filter.getIds())){ lambdaQueryWrapper.in(ActionPO::getId,filter.getIds()); } if (ObjectUtils.isNotEmpty(filter.getUserIds())) { lambdaQueryWrapper.in(ActionPO::getUserId, filter.getUserIds()); } if (ObjectUtils.isNotEmpty(filter.getPos())){ lambdaQueryWrapper.eq(ActionPO::getPosId,filter.getPos().getId()); if (ObjectUtils.isNotEmpty(filter.getPos().getType())) { lambdaQueryWrapper.eq(ActionPO::getPosOtype, filter.getPos().getType().getOtid()); } } if (ObjectUtils.isNotEmpty(filter.getObj())){ lambdaQueryWrapper.eq(ActionPO::getObjId,filter.getObj().getId()); if (ObjectUtils.isNotEmpty(filter.getObj().getType())){ lambdaQueryWrapper.eq(ActionPO::getObjType,filter.getObj().getType().getOtid()); } if (ObjectUtils.isNotEmpty(filter.getObj().getName())){ lambdaQueryWrapper.like(ActionPO::getObjName,filter.getObj().getName()); } } if (ObjectUtils.isNotEmpty(filter.getKeyword())) { lambdaQueryWrapper .like(ActionPO::getObjName, filter.getKeyword()) .or() .like(ActionPO::getResultName, filter.getKeyword()) ; } if (ObjectUtils.isNotEmpty(objIds)){ lambdaQueryWrapper.in(ActionPO::getObjId,objIds); } if (ObjectUtils.isNotEmpty(filter.getEquals()) || ObjectUtils.isNotEmpty(filter.getRanges()) || ObjectUtils.isNotEmpty(filter.getContains())) { String jsonbQuery = filter.toJsonbSql().toSql(); if (ObjectUtils.isNotEmpty(jsonbQuery)){ lambdaQueryWrapper.apply(jsonbQuery); } } if (ObjectUtils.isNotEmpty(filter.getResult())){ lambdaQueryWrapper.eq(ActionPO::getResultId,filter.getResult().getId()); if (ObjectUtils.isNotEmpty(filter.getResult().getType())){ lambdaQueryWrapper.eq(ActionPO::getResultType,filter.getResult().getType().getOtid()); } if (ObjectUtils.isNotEmpty(filter.getResult().getType())){ lambdaQueryWrapper.eq(ActionPO::getResultType,filter.getResult().getType().getOtid()); } if (ObjectUtils.isNotEmpty(filter.getResult().getName())){ lambdaQueryWrapper.like(ActionPO::getResultName,filter.getResult().getName()); } } if (ObjectUtils.isNotEmpty(filter.getStartTime())){ lambdaQueryWrapper.ge(ActionPO::getCreateTime,filter.getStartTime()); } if (ObjectUtils.isNotEmpty(filter.getEndTime())){ lambdaQueryWrapper.le(ActionPO::getCreateTime,filter.getEndTime()); } if (ObjectUtils.isNotEmpty(filter.getActionTypeId())){ lambdaQueryWrapper.eq(ActionPO::getActionTypeId,filter.getActionTypeId()); } if (ObjectUtils.isNotEmpty(filter.getActionTypeId())){ lambdaQueryWrapper.eq(ActionPO::getActionTypeId,filter.getActionTypeId()); } if (ObjectUtils.isNotEmpty(filter.getActionTypeIds())){ lambdaQueryWrapper.in(ActionPO::getActionTypeId,filter.getActionTypeIds()); } lambdaQueryWrapper.orderByDesc(ActionPO::getUpdateTime); List actionPOS = list(lambdaQueryWrapper); log.info("list 10-->:{}", System.currentTimeMillis() - currentTimeMillis);
框架本身支持分页,不用pagehelper,再测试一下看看呢。我也想了解性能怎么样。
希望吸纳PageHelper的分页设计模式
1.拉取过了测试性能demo的案例,经过测试确实性能优于mybatisplus 2.准备将现有项目工程切入flex,根据文档说明,某一具体业务类切成flex的实现,发现并没有demo案例出现的性能差异效果,结果均弱于plus 3.测试说明:本地测试环境,postgresql数据库,springboot2.5.3,jdk11,flex版本:1.8.9,mybatisplus 版本:3.5.3,pagehelper:1.4.3;主要测试分页查询性能,所有环境均一致,仅切换了ORM框架 4.测试数据:单表录入模拟数据 14460039 5.测试结果: a>plus: b>flex: 10次测试结果均于上图类似不再过多展示 6.相关测试用例代码: flex:
....................... log.info("----------------start2----------------------------"); long currentTimeMillis = System.currentTimeMillis(); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select(ACTION.DEFAULT_COLUMNS).from(ACTION); queryWrapper.and(ACTION.ID.eq(filter.getId(),If::hasText)); queryWrapper.and(ACTION.ID.in(filter.getIds(),If::isNotEmpty));
plus: log.info("----------------start----------------------------"); long currentTimeMillis = System.currentTimeMillis(); Page pageRequest = SqlBuilders.page(filter);
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (ObjectUtils.isNotEmpty(filter.getUser())){
lambdaQueryWrapper.eq(ActionPO::getUserId,filter.getUser().getId());
}
if (ObjectUtils.isNotEmpty(filter.getId())){
lambdaQueryWrapper.eq(ActionPO::getId,filter.getId());
}
if (ObjectUtils.isNotEmpty(filter.getIds())){
lambdaQueryWrapper.in(ActionPO::getId,filter.getIds());
}
if (ObjectUtils.isNotEmpty(filter.getUserIds())) {
lambdaQueryWrapper.in(ActionPO::getUserId, filter.getUserIds());
}
if (ObjectUtils.isNotEmpty(filter.getPos())){
lambdaQueryWrapper.eq(ActionPO::getPosId,filter.getPos().getId());
if (ObjectUtils.isNotEmpty(filter.getPos().getType())) {
lambdaQueryWrapper.eq(ActionPO::getPosOtype, filter.getPos().getType().getOtid());
}
}
if (ObjectUtils.isNotEmpty(filter.getObj())){
lambdaQueryWrapper.eq(ActionPO::getObjId,filter.getObj().getId());
if (ObjectUtils.isNotEmpty(filter.getObj().getType())){
lambdaQueryWrapper.eq(ActionPO::getObjType,filter.getObj().getType().getOtid());
}
if (ObjectUtils.isNotEmpty(filter.getObj().getName())){
lambdaQueryWrapper.like(ActionPO::getObjName,filter.getObj().getName());
}
}
if (ObjectUtils.isNotEmpty(filter.getKeyword())) {
lambdaQueryWrapper
.like(ActionPO::getObjName, filter.getKeyword())
.or()
.like(ActionPO::getResultName, filter.getKeyword())
;
}
if (ObjectUtils.isNotEmpty(objIds)){
lambdaQueryWrapper.in(ActionPO::getObjId,objIds);
}
if (ObjectUtils.isNotEmpty(filter.getEquals())
|| ObjectUtils.isNotEmpty(filter.getRanges())
|| ObjectUtils.isNotEmpty(filter.getContains())) {
String jsonbQuery = filter.toJsonbSql().toSql();
if (ObjectUtils.isNotEmpty(jsonbQuery)){
lambdaQueryWrapper.apply(jsonbQuery);
}
}
if (ObjectUtils.isNotEmpty(filter.getResult())){
lambdaQueryWrapper.eq(ActionPO::getResultId,filter.getResult().getId());
if (ObjectUtils.isNotEmpty(filter.getResult().getType())){
lambdaQueryWrapper.eq(ActionPO::getResultType,filter.getResult().getType().getOtid());
}
if (ObjectUtils.isNotEmpty(filter.getResult().getType())){
lambdaQueryWrapper.eq(ActionPO::getResultType,filter.getResult().getType().getOtid());
}
if (ObjectUtils.isNotEmpty(filter.getResult().getName())){
lambdaQueryWrapper.like(ActionPO::getResultName,filter.getResult().getName());
}
}
if (ObjectUtils.isNotEmpty(filter.getStartTime())){
lambdaQueryWrapper.ge(ActionPO::getCreateTime,filter.getStartTime());
}
if (ObjectUtils.isNotEmpty(filter.getEndTime())){
lambdaQueryWrapper.le(ActionPO::getCreateTime,filter.getEndTime());
}
if (ObjectUtils.isNotEmpty(filter.getActionTypeId())){
lambdaQueryWrapper.eq(ActionPO::getActionTypeId,filter.getActionTypeId());
}
if (ObjectUtils.isNotEmpty(filter.getActionTypeId())){
lambdaQueryWrapper.eq(ActionPO::getActionTypeId,filter.getActionTypeId());
}
if (ObjectUtils.isNotEmpty(filter.getActionTypeIds())){
lambdaQueryWrapper.in(ActionPO::getActionTypeId,filter.getActionTypeIds());
}
lambdaQueryWrapper.orderByDesc(ActionPO::getUpdateTime);
List actionPOS = list(lambdaQueryWrapper);
log.info("list 10-->:{}", System.currentTimeMillis() - currentTimeMillis);