数据库关键字申明,类SearchFilter:

/******************************************************************************** Copyright (c) 2005, 2014 springside.github.io** Licensed under the Apache License, Version 2.0 (the "License");*******************************************************************************/
package com.clearpro.common.modules.persistence;import java.util.Map;
import java.util.Map.Entry;import org.apache.commons.lang3.StringUtils;import com.google.common.collect.Maps;public class SearchFilter {public enum Operator {EQ, LIKE, GT, LT, GTE, LTE,IN}public String fieldName;public Object value;public Operator operator;public SearchFilter(String fieldName, Operator operator, Object value) {this.fieldName = fieldName;this.value = value;this.operator = operator;}/*** searchParams中key的格式为OPERATOR_FIELDNAME*/public static Map<String, SearchFilter> parse(Map<String, Object> searchParams) {Map<String, SearchFilter> filters = Maps.newHashMap();for (Entry<String, Object> entry : searchParams.entrySet()) {// 过滤掉空值String key = entry.getKey();Object value = entry.getValue();/*if (StringUtils.isBlank((String) value)) {continue;}*/// 拆分operator与filedAttributeString[] names = StringUtils.split(key, "_");if (names.length != 2) {throw new IllegalArgumentException(key + " is not a valid search filter name");}String filedName = names[1];Operator operator = Operator.valueOf(names[0]);// 创建searchFilterSearchFilter filter = new SearchFilter(filedName, operator, value);filters.put(key, filter);}return filters;}
}

关键字匹配的sql处理,类DynamicSpecifications:

/******************************************************************************** Copyright (c) 2005, 2014 springside.github.io** Licensed under the Apache License, Version 2.0 (the "License");*******************************************************************************/
package com.clearpro.common.modules.persistence;import java.util.Collection;
import java.util.List;import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;import org.apache.commons.lang3.StringUtils;
import org.springframework.data.jpa.domain.Specification;import com.clearpro.common.modules.utils.Collections3;
import com.google.common.collect.Lists;public class DynamicSpecifications {public static <T> Specification<T> bySearchFilter(final Collection<SearchFilter> filters, final Class<T> entityClazz) {return new Specification<T>() {@Overridepublic Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) {if (Collections3.isNotEmpty(filters)) {List<Predicate> predicates = Lists.newArrayList();for (SearchFilter filter : filters) {// nested path translate, 如Task的名为"user.name"的filedName, 转换为Task.user.name属性String[] names = StringUtils.split(filter.fieldName, ".");Path expression = root.get(names[0]);for (int i = 1; i < names.length; i++) {expression = expression.get(names[i]);}// logic operatorswitch (filter.operator) {case EQ:predicates.add(builder.equal(expression, filter.value));break;case LIKE:predicates.add(builder.like(expression, "%" + filter.value + "%"));break;case GT:predicates.add(builder.greaterThan(expression, (Comparable) filter.value));break;case LT:predicates.add(builder.lessThan(expression, (Comparable) filter.value));break;case GTE:predicates.add(builder.greaterThanOrEqualTo(expression, (Comparable) filter.value));break;case LTE:predicates.add(builder.lessThanOrEqualTo(expression, (Comparable) filter.value));break;case IN:predicates.add(expression.in(filter.value));break;}}// 将所有条件用 and 联合起来if (!predicates.isEmpty()) {return builder.and(predicates.toArray(new Predicate[predicates.size()]));}}return builder.conjunction();}};}
}

注意:IN 关键字的处理与其他不同

springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)相关推荐

  1. php gt lte gte,springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)

    数据库关键字申明,类SearchFilter: /*************************************************************************** ...

  2. Spring Jpa实体中出现数据库关键字解决方法

    Spring Jpa实体中出现数据库关键字解决方法 在Spring Jpa 中出现关键字是无法向数据库中添加等操作 有异常进行抛出. 这里可以使用字段个属性进行关联 @Column(name = &q ...

  3. 黑马 SpringData JPA笔记

    课程链接:https://www.bilibili.com/video/BV1Y4411W7Rx?from=search&seid=415951199875837982 第一 orm思想 ​ ...

  4. SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合

    一.SpringBoot 简介: spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装.所以,你以前可以用spring做的事情,现在用spri ...

  5. 全网最全精析破解 Springboot+Jpa 对数据库增删改查

    前言: 昨天做的是springboot+mybatis 对数据库进行增删改查 但是我感觉配置文件太多了 很麻烦 繁琐 今天搞一下springboot+Jpa对数据库进行增删改查, 感觉很好用 ,所以记 ...

  6. SpringData JPA 之疑难杂症

    SpringData JPA 之疑难杂症 1.JPA自动建表不生成外键 SpringBoot项目搭配的JPA使用时候,有一对多的关系注解,那么自动会生成外键.外键在有些时候,会导致代码不能走通,我们不 ...

  7. SpringData JPA 详解(自定义查询、分页、事务控制)

    简介 SpringData JPA是 JPA的一种实现,极大的简化了JPA的开发,原始JPA的开发,需要创建实体管理工厂,使用实体管理器定义各种查询进行CRUD操作,而SpringData JPA只需 ...

  8. 带你搭一个SpringBoot+SpringData JPA的环境

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...

  9. idea加入springboot插件_带你搭一个SpringBoot+SpringData JPA的环境

    前言 只有光头才能变强. 不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData ...

最新文章

  1. 如何设置文字的位置html5,怎么设置文字在表格中的位置
  2. 基于角色的访问控制(RBAC)
  3. Github火爆的项目,用聪明的方式学习Vim!
  4. FisherVector编码的来龙去脉
  5. Super BOM应用步骤总结
  6. servlet html登录,Servlet实现用户登录
  7. 第一百一十八期:运行 JavaScript 代码片段的 20 种工具
  8. 给来英国的女士或先生一点建议,同样关于行李.
  9. 洛谷P1978 集合 [2017年6月计划 数论08]
  10. php readfile cookie,python处理cookie详解
  11. 项目报告制作-中型无盘网吧
  12. MAC中安装Navicat Premium
  13. ios录音文件路径_苹果6s的录音储存在哪个文件夹
  14. 咸鱼Maya笔记—Maya 热键
  15. 彩票股票金融与运气之研究(二)-飘渺的希望
  16. Excel电子表格隔行自动填充底色
  17. 语音信号短时域分析之短时平均能量(四)
  18. 量化交易日记20210120
  19. Java基础单元测试
  20. 安装 Xcode_8.1.xip(踩坑)

热门文章

  1. SQL注入之字符型注入练习(pikachu)
  2. 渗透测试——sql注入进阶/基于时间的盲注/一看就会/
  3. 创业投资——IDG技术创业投资基金
  4. Resetting a lost Admin password
  5. 一、什么是JavaWeb?
  6. 跟着团子学SAP PS:企业如何依托信息化工具构建成熟的项目成本管理体系
  7. STM32F103单片机控制SG90舵机
  8. Python常用模块-1
  9. 【编码实战】2022年还在用jjwt操作jwt?,推荐你使用nimbus-jose-jwt,爽到飞起~
  10. keras指定gpu_Keras多GPU训练指南