php gt lte gte,springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
数据库关键字申明,类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 Mapparse(MapsearchParams) {
Mapfilters = Maps.newHashMap();
for (Entryentry : searchParams.entrySet()) {
// 过滤掉空值
String key = entry.getKey();
Object value = entry.getValue();
/*if (StringUtils.isBlank((String) value)) {
continue;
}*/
// 拆分operator与filedAttribute
String[] 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]);
// 创建searchFilter
SearchFilter 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 SpecificationbySearchFilter(final Collectionfilters, final ClassentityClazz) {
return new Specification() {
@Override
public Predicate toPredicate(Rootroot, CriteriaQuery> query, CriteriaBuilder builder) {
if (Collections3.isNotEmpty(filters)) {
Listpredicates = 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 operator
switch (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 关键字的处理与其他不同
php gt lte gte,springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)相关推荐
- springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
数据库关键字申明,类SearchFilter: /*************************************************************************** ...
- SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合
一.SpringBoot 简介: spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装.所以,你以前可以用spring做的事情,现在用spri ...
- 全网最全精析破解 Springboot+Jpa 对数据库增删改查
前言: 昨天做的是springboot+mybatis 对数据库进行增删改查 但是我感觉配置文件太多了 很麻烦 繁琐 今天搞一下springboot+Jpa对数据库进行增删改查, 感觉很好用 ,所以记 ...
- SpringData JPA 之疑难杂症
SpringData JPA 之疑难杂症 1.JPA自动建表不生成外键 SpringBoot项目搭配的JPA使用时候,有一对多的关系注解,那么自动会生成外键.外键在有些时候,会导致代码不能走通,我们不 ...
- 黑马 SpringData JPA笔记
课程链接:https://www.bilibili.com/video/BV1Y4411W7Rx?from=search&seid=415951199875837982 第一 orm思想 ...
- 带你搭一个SpringBoot+SpringData JPA的环境
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...
- idea加入springboot插件_带你搭一个SpringBoot+SpringData JPA的环境
前言 只有光头才能变强. 不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData ...
- SpringData JPA条件查询、排序、分页查询
前言 在刚开始学习的时候,在dao的定义的接口需要继承JpaRepository<T, ID>接口和JpaSpecificationExecutor< T >接口,但是一直以来 ...
- spring boot 整合多数据源JDBC、多数据源mybatis、多数据源springdata jpa
目录 代码地址:(spring-boot github地址) 1.springboot整合JDBC 2.springboot整合mybatis 3.springboot整合springdata jpa ...
最新文章
- Python读取xlsx文件报错:raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘)
- 皮一皮:美甲的最高境界...
- linux pid t 头文件_Linux信号处理
- java libpcap,Linux下编译安装libpcap
- IllegalArgumentException:@Body parameters cannot be used with form or multi-part encoding
- slidingmenu能否实现菜单页在内容页上方,而不是把内容页挤到一边去????...
- C语言头文件 “ 细节 ”
- C语言的10大基础算法
- list 查找_五千字长文带你学习 二分查找算法
- Bailian3751 地质考察队【最值】
- 初始化和清理(构造器+重载/重写+this关键字)
- 交易学习--复盘软件及其使用方法
- 游戏开发中的数学基础
- “磁碟机”病毒肆虐 数万电脑中招
- php 模拟登陆微云,微云 - HHTjim'S 部落格
- PythonProgramming.net Python 金融教程(转)
- html的submitt跳转到哪,SUBMIT 用法
- 计算机教学模式有待创新,计算机软件教学中教学评价模式的创新与探索
- 设定Applocker和解决问题
- 1449异常 mysql_mysql异常-UncategorizedSQLException 1449
热门文章
- 做一个有姿态的女孩子
- android高级组件,Android高级组件ImageSwitcher图像切换器使用方法详解
- 10篇Nature专题报导人类微生物组计划2(iHMP)成果及展望
- R语言ggplot2可视化:ggplot2使用geom_mark_ellipse函数进行椭圆形圈定(注释)特定的数据簇或组
- Python使用scipy包将稀疏矩阵保存为Mtx格式和npz格式文件实战
- pandas生成新的累加数据列、pandas生成新的累加数据列(数据列中包含NaN的情况)、pandas计算整个dataframe的所有数据列的累加
- Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
- R语言If、Else条件语句实战
- python计算特征与目标的相关性并可视化
- R可视化包ggplot2更改背景色实战