springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
来源:互联网 发布:mac自定义边栏图标 编辑:程序博客网 时间:2024/06/05 03:11
数据库关键字申明,类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 关键字的处理与其他不同
0 0
- springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
- MongoDB查询条件$lt $lte $gt $gte
- MongoDB小结14 - find【查询条件$lt $lte $gt $gte】
- 条件注释判断浏览器版本 lt lte gt gte
- eq相等 ne、neq不相等, gt大于, lt小于 gte、ge大于等于 lte、le 小于等于 not非 mod求模 等
- $lt(<) $lte(<=) $gt(>) $gte(>=) $ne(!=) $in $not $size $where limit(5).skip(5).sort({"number" : -1}
- thinkphp3.2 表达式查询eq,neq,gt,egt,lt,elt,in,between,like,exp
- jQuery :eq,lt,gt
- 持久层框架常用关键字 NE GE LE GT LT EQ 等等
- 打包JPA动态查询(CriteriaQuery) eq、ge、gt
- SpringData-JPA操作数据库
- eq,neq,gt,lt等表达式缩写
- jquery选择器eq,gt,lt英文
- JQuery之选择器"gt()""eq()""lt()"
- eq,neq,gt,lt等表达式缩写
- SpringData JPA操作MySQL数据库
- Thinkphp中eq,neq,gt,lt等表达式缩写
- 学习笔记:shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
- Windows远程桌面连接ubuntu 14.04图解设置教程
- WebRTC漏洞可泄露VPN用户真实IP
- 回溯
- 软工之各种图例
- androidStudio com.android.build.api.transform.TransformException解决办法
- springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
- JS定义和直接使用匿名函数的三种实现方式
- [leetcode] 114. Flatten Binary Tree to Linked List
- JS兼容所有浏览器获取浏览器高度和宽度
- 分支限界法
- Boost, C++11,生产者消费者以及Qt生产者消费者例子
- 二叉树的前序、中序、后序遍历的三种方法
- 关于C#创建windows服务的测试与总结
- FastDFS分布文件系统