使用LambdaQueryWrapper动态加过滤条件 动态Lambda
程序员文章站
2022-03-05 11:07:29
目录lambdaquerywrapper动态加过滤条件 动态lambdamybatis-plus querywrapper lambdaquerywrapperlambdaquerywrapper动态...
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);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 微软为 Win11 重新设计的原生应用现已面向更多用户推出
下一篇: C++实现关机功能详细代码