使用LambdaQueryWrapper动态加过滤条件 动态Lambda
短信预约 -IT技能 免费直播动态提醒
LambdaQueryWrapper动态加过滤条件 动态Lambda
1、遇到这样的需求,在baseservice类中处理数据权限,子类可能使用QueryWrapper或者LambdaQueryWrapper调用base类的方法进行查询。
2、可以拿到的:PO的类,数据权限属性的属性名(是固定的)
直接上代码:
private static final int FLAG_SERIALIZABLE = 1;
//获取当前登录人权限
Integer secretLevel = getUserSecretLevel();
if(secretLevel!=null){
SFunction func = null;
final MethodHandles.Lookup lookup = MethodHandles.lookup();
//po的返回Integer的一个方法
MethodType methodType = MethodType.methodType(Integer.class, entityClass);
final CallSite site;
try {
//方法名叫做:getSecretLevel 转换为 SFunction function interface对象
site = LambdaMetafactory.altMetafactory(lookup,
"invoke",
MethodType.methodType(SFunction.class),
methodType,
lookup.findVirtual(entityClass, "getSecretLevel", MethodType.methodType(Integer.class)),
methodType,FLAG_SERIALIZABLE);
func = (SFunction) site.getTarget().invokeExact();
//数据小于这个级别的都查出来
queryWrapper.le(func,secretLevel);
} catch (Throwable e) {
log.error("获取getSecretLevel方法错误",e);
}
}
mybatis-plus QueryWrapper LambdaQueryWrapper
ContractTemplate::getTemplateCode 转为对应的字段
LambdaQueryWrapper<SomeClass> objectLambdaQueryWrapper = Wrappers.lambdaQuery();
objectLambdaQueryWrapper.eq(searchDto.getTemplateCode() != null, ContractTemplate::getTemplateCode, searchDto.getTemplateCode());
IPage<SomeClass> page = page(MybatisPlusUtil.setPageParams(pageNo, pageSize), objectLambdaQueryWrapper);
return page
QueryWrapper
QueryWrapper<SomeClass> queryWrapper = Wrappers.query();
queryWrapper.eq(searchDto.getTemplateCode() != null, TemplateConst.COL_TEMPLATE_CODE, searchDto.getTemplateCode())
.ge(searchDto.getStartDate() != null, TemplateConst.COL_CREATE_TIME, searchDto.getStartDate())
.lt(searchDto.getEndDate() != null, TemplateConst.COL_CREATE_TIME, DateUtils.addDays(searchDto.getEndDate(), 1))
.eq(searchDto.getContractCategoryId() != null, TemplateConst.COL_CATEGORY_ID, searchDto.getContractCategoryId())
.and(i -> i.like(TemplateConst.COL_TEMPLATE_NAME, searchDto.getKeyword()).or().like(TemplateConst.COL_DESCRIPTION, searchDto.getKeyword()))
.eq(searchDto.getIs_enabled() != null, TemplateConst.COL_IS_ENABLED, searchDto.getIs_enabled())
// 未标志删除的数据
.eq(CommonConst.DBColName.DEL_FLAG, CommonConst.IsEnabled.ENABLED.getCode())
.orderByDesc(TemplateConst.COL_CREATE_TIME)
;
IPage<ContractTemplate> page = page(MybatisPlusUtil.setPageParams(pageNo, pageSize), queryWrapper);
return MybatisPlusUtil.parsePageDTO(page);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341