当前位置: 首页 > news >正文

专门做酒的网站有哪些亿网联播

专门做酒的网站有哪些,亿网联播,项目计划书怎么做,wordpress设置外网‍ 筛选条件数据类型完善 文本类 筛选器组件给了一个文本类操作的范例#xff0c;如下#xff1a; Text: [{label: 等于,en_label: Equal,style: noop},{label: 等于其中之一,en_label: Equal to one of,value: one_of,style: tags},{label: 不等于,en_label: Not equal,v…‍ 筛选条件数据类型完善 文本类 筛选器组件给了一个文本类操作的范例如下 Text: [{label: 等于,en_label: Equal,style: noop},{label: 等于其中之一,en_label: Equal to one of,value: one_of,style: tags},{label: 不等于,en_label: Not equal,value: not_equal,style: noop},{label: 包含,en_label: Contains,value: contains,style: noop},{label: 不包含,en_label: Not contain,value: not_contain,style: noop},{label: 为空,en_label: Empty,value: empty,style: none},{label: 不为空,en_label: Not empty,value: not_empty,style: none}]即以下几种情况 等于等于其中之一不等于包含不包含为空不为空 平台认为不是太合理做了以下调整 等于其中之一很少用并且可以等价转换一个条件组内含多个等于关系的条件组内逻辑关系为或因此去除对于字符串常用的主要是模糊匹配、以……开始、以……结束因此将包含调整为模糊匹配、去除不包含增加以……开始、以……结束两种其他保留不变同时对操作符的编码也做了相应调整。 调整完成后如下 Text: [{label: 等于,value: EQ,style: noop},{label: 模糊匹配,value: LK,style: noop},{label: 以…开始,value: RL,style: noop},{label: 以…结束,value: LL,style: noop},{label: 不等于,value: NE,style: noop},{label: 为空,value: NL,style: none},{label: 不为空,value: NN,style: none}]后端将规则转换成SQL片段的功能方法也要进行相应调整这里参考了平台原本的通用查询功能的部分处理改造如下 Overridepublic String generateSqlPart(String id, String rule) {String result ;// 转换数据DataFilterRuleVO dataFilterRule JSON.parseObject(rule, DataFilterRuleVO.class);// 获取组集合ListDataFilterGroupVO dataFilterGroupList dataFilterRule.getFilters();// 存放各组对应的条件sql片段ListString groupSqlPartList new ArrayList(dataFilterGroupList.size());// 遍历组集合for (DataFilterGroupVO dataFilterGroup : dataFilterGroupList) {// 获取条件集合ListDataFilterConditionVO conditionList dataFilterGroup.getConditions();if (CollectionUtils.isNotEmpty(conditionList)) {// 存放各条件对应的条件sql片段ListString conditionSqlPartList new ArrayList(conditionList.size());// 遍历条件集合for (DataFilterConditionVO condition : conditionList) {// 获取字段名,命名风格驼峰转换成下划线String fieldName CommonUtil.camelToUnderline(condition.getProperty());Object value condition.getValue();// 获取操作String operator condition.getOperator();QueryRuleEnum queryRule EnumUtils.getEnum(QueryRuleEnum.class, operator, QueryRuleEnum.EQ);QueryWrapper? queryWrapper new QueryWrapper();addEasyQuery(queryWrapper, fieldName, queryRule, value);log.info(queryWrapper.getSqlSegment());log.info(queryWrapper.getParamNameValuePairs().toString());// 放入结果列表缓存 conditionSqlPartList.add(queryWrapper.getTargetSql());}// 完成各条件的处理后进行组内拼接if (conditionList.size() 1) {String logicalOperator dataFilterGroup.getLogicalOperator();StringBuffer sb new StringBuffer();sb.append(();conditionSqlPartList.stream().forEach(sqlPart - {sb.append(sqlPart);sb.append( logicalOperator );});sb.delete(sb.length() - logicalOperator.length() - 1, sb.length());sb.append());groupSqlPartList.add(sb.toString());} else {groupSqlPartList.add(( conditionSqlPartList.get(0) ));}}}这里调用了一个方法addEasyQuery借助了MybatisPlus组件的条件构造器功能如下 /*** 根据规则走不同的查询** param queryWrapper QueryWrapper* param name 字段名字* param rule 查询规则* param value 查询条件值*/private void addEasyQuery(QueryWrapper? queryWrapper, String name, QueryRuleEnum rule, Object value) {if (value null || rule null || ObjectUtils.isEmpty(value)) {return;}name CommonUtil.camelToUnderline(name);switch (rule) {case GT:queryWrapper.gt(name, value);break;case GE:queryWrapper.ge(name, value);break;case LT:queryWrapper.lt(name, value);break;case LE:queryWrapper.le(name, value);break;case EQ:queryWrapper.eq(name, value);break;case NE:queryWrapper.ne(name, value);break;case IN:if (value instanceof String) {queryWrapper.in(name, (Object[]) value.toString().split(COMMA));} else if (value instanceof String[]) {queryWrapper.in(name, (Object[]) value);} else {queryWrapper.in(name, value);}break;case LK:queryWrapper.like(name, value);break;case LL:queryWrapper.likeLeft(name, value);break;case RL:queryWrapper.likeRight(name, value);break;default:log.info(--查询规则未匹配到---);break;}}如何获取完整SQL片段 此处遇到了一个棘手的问题。 我们需要获取到完整的SQL片段类似这种((param_value ‘10’ and param_name like ‘%用户%’ ) or (param_key like ‘%password%’) )。 但是MybatisPlus组件的条件构造器QueryWrapper拿不到这种完整的sql片段而是将sql语句参数和值分开保存的通过getSqlSegment可以获取到参数化的sql语句通过getParamNameValuePairs可以获取到参数值如下 查了半天资料也没找到现成的方法可用将这二者处理成我们期望的完整SQL片段。 于是有两种方案可选一种是放弃借助QueryWrapper自己来拼接SQL语句一种是仍然使用QueryWrapper自己来实现转换功能。 综合考虑了下后一种的扩展性更好一些只是写个单条件的字符串替换处理复杂度不高需要注意区分数值类和非数值类类型相应的处理时要不要加单引号。 ‍ 转换方法行不复杂如下 /*** 将参数化的SQL填充值处理为完整的SQL片段** param sqlSegment 参数化的SQL片段* param paramNameValuePairs 参数值对* param numberFlag 是否为数值类型* return 完整的SQL片段*/private String handleSqlPart(String sqlSegment, MapString, Object paramNameValuePairs, boolean numberFlag) {for (int i 0; i paramNameValuePairs.size(); i) {String value paramNameValuePairs.get(MPGENVAL (i 1)).toString();// 若为非数值类则加上单引号if (!numberFlag) {value value ;}sqlSegment StringUtils.replace(sqlSegment, #{ew.paramNameValuePairs.MPGENVAL (i 1) }, value);}return sqlSegment;} 是否为数值类型则是通过实体模型配置获取当前模型属性的数据类型来判断的如下 Overridepublic String generateSqlPart(String id, String rule) {String result ;ListEntityModelProperty modelPropertyList entityModelPropertyService.getFullPropertyByEntityModelId(id);String[] numberDataType {INTEGER, LONG, DOUBLE, DECIMAL};// 转换数据DataFilterRuleVO dataFilterRule JSON.parseObject(rule, DataFilterRuleVO.class);// 获取组集合ListDataFilterGroupVO dataFilterGroupList dataFilterRule.getFilters();// 存放各组对应的条件sql片段ListString groupSqlPartList new ArrayList(dataFilterGroupList.size());// 遍历组集合for (DataFilterGroupVO dataFilterGroup : dataFilterGroupList) {// 获取条件集合ListDataFilterConditionVO conditionList dataFilterGroup.getConditions();if (CollectionUtils.isNotEmpty(conditionList)) {// 存放各条件对应的条件sql片段ListString conditionSqlPartList new ArrayList(conditionList.size());// 遍历条件集合for (DataFilterConditionVO condition : conditionList) {// 获取字段名,命名风格驼峰转换成下划线String fieldName CommonUtil.camelToUnderline(condition.getProperty());Object value condition.getValue();// 获取操作String operator condition.getOperator();QueryRuleEnum queryRule EnumUtils.getEnum(QueryRuleEnum.class, operator, QueryRuleEnum.EQ);QueryWrapper? queryWrapper new QueryWrapper();addEasyQuery(queryWrapper, fieldName, queryRule, value);log.info(queryWrapper.getSqlSegment());log.info(queryWrapper.getParamNameValuePairs().toString());AtomicBoolean numberFlag new AtomicBoolean(false);modelPropertyList.stream().filter(modelProperty - modelProperty.getCode().equals(condition.getProperty())).findFirst().ifPresent(modelProperty - {String dataType modelProperty.getDataType();if (ArrayUtils.contains(numberDataType, dataType)) {numberFlag.set(true);}});String sqlPart handleSqlPart(queryWrapper.getSqlSegment(), queryWrapper.getParamNameValuePairs(), numberFlag.get());// 放入结果列表缓存conditionSqlPartList.add(sqlPart);}// 完成各条件的处理后进行组内拼接if (conditionList.size() 1) {String logicalOperator dataFilterGroup.getLogicalOperator();StringBuffer sb new StringBuffer();sb.append(();conditionSqlPartList.stream().forEach(sqlPart - {sb.append(sqlPart);sb.append( logicalOperator );});sb.delete(sb.length() - logicalOperator.length() - 1, sb.length());sb.append());groupSqlPartList.add(sb.toString());} else {groupSqlPartList.add(( conditionSqlPartList.get(0) ));}}}实现效果如下 数值类未加单引号非数值类附加了单引号符合预期。 开源平台资料 平台名称一二三开发平台 简介 企业级通用开发平台 设计资料[csdn专栏] 开源地址[Gitee] 开源协议MIT 如果您在阅读本文时获得了帮助或受到了启发希望您能够喜欢并收藏这篇文章为它点赞~ 请在评论区与我分享您的想法和心得一起交流学习不断进步遇见更加优秀的自己
http://www.hkea.cn/news/14462852/

相关文章:

  • 夹江网站建设微信广告推广平台
  • 豪华网站建设免费ai写作网站3000字
  • 网站2345查询网
  • 网站租房做公寓国内视频培训网站建设
  • 网站建设技术知乎瓷器网站源码
  • 网站怎么做推广成都网站建设有名的公司
  • 展示型网站解决方案成都易站网站建设
  • 做防护用品的网站wordpress菜单优化插件
  • 济南网站建设开发公司开通网站运营商备案
  • dede 网站目录无忧代理 在线
  • html5 网站logo学推广网络营销去哪里
  • 如何做ico空投网站写网页用什么软件
  • 建设银行 商户网站打不开创业平台是干什么的
  • 网站后台基本功能wordpress 壁纸模板
  • 以用户为中心 建设学校网站至少保存十个以上域名网站
  • 网站建设的栏目内容邢台做网站的
  • 镇江网站建设方案短链接生成官网
  • 做网站要坚持青州网站建设青州
  • 电商网站话费充值怎么做网站维护一次多少钱
  • 做艺术品展览的网站微信下载网址是多少
  • 佛山合展商务网站建设正版电子商务网
  • 网站怎么设计抖音seo工具
  • 手机精品网站建设ae模板网
  • 什么网站备案容易审核沈阳网站建设q479185700棒
  • 网站怎么免费做推广好品质高端网站设计新感觉建站
  • 做网站的工资高host wordpress
  • 暖色调网页设计网站自己画装修设计图的软件
  • 电气网站开发网站建设公司广
  • 优秀网站参考移动网站建设价格便宜
  • 网站设计哪家强软件app下载免费