Commit 61cfd0d63bd991ca6d694805029efe6c9de083a4

Authored by 王通
1 parent 643f5349

1.PredicatesBuilder in条件表达式修正

src/main/java/com/bsth/entity/search/PredicatesBuilder.java
1   -package com.bsth.entity.search;
2   -
3   -import org.joda.time.DateTime;
4   -
5   -import javax.persistence.criteria.CriteriaBuilder;
6   -import javax.persistence.criteria.Path;
7   -import javax.persistence.criteria.Predicate;
8   -import java.text.NumberFormat;
9   -import java.text.ParseException;
10   -import java.text.SimpleDateFormat;
11   -import java.util.ArrayList;
12   -import java.util.Calendar;
13   -import java.util.Date;
14   -import java.util.List;
15   -
16   -/**
17   - *
18   - * @ClassName: PredicatesBuilder
19   - * @author PanZhao
20   - * @date 2016年3月16日 下午4:05:07
21   - *
22   - */
23   -public class PredicatesBuilder {
24   -
25   - /**
26   - * Number转换器
27   - */
28   - private static NumberFormat nf;
29   -
30   - static{
31   - nf = NumberFormat.getInstance();
32   - }
33   -
34   - public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){
35   - Class<?> leftType = expression.getJavaType();
36   - Class<?> rightType = object.getClass();
37   -
38   - if(Date.class.isAssignableFrom(leftType) &&
39   - String.class.isAssignableFrom(rightType)){
40   - DateTime dateTime = new DateTime(object);
41   - return cb.equal(expression, dateTime.toDate());
42   - }
43   - else {
44   - return cb.equal(expression, object);
45   - }
46   -
47   - /*if (Number.class.isAssignableFrom(leftType) &&
48   - (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number == Number/String
49   - return cb.equal(expression, object);
50   - } else if (String.class.isAssignableFrom(leftType) &&
51   - (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String == String/Number
52   - return cb.equal(expression, object);
53   - } else if (Boolean.class.isAssignableFrom(leftType) &&
54   - Boolean.class.isAssignableFrom(rightType)) {
55   - return cb.equal(expression, object);
56   - } else if (Date.class.isAssignableFrom(leftType) &&
57   - Date.class.isAssignableFrom(rightType)) { // Date == Date
58   - return cb.equal(expression, object);
59   - } else if (Date.class.isAssignableFrom(leftType) &&
60   - String.class.isAssignableFrom(rightType)) { // Date == String
61   - DateTime dateTime = new DateTime(object);
62   - return cb.equal(expression, dateTime.toDate());
63   - } else {
64   - throw new RuntimeException("eq 不支持类型组合:" + expression.getJavaType() + "==" + object.getClass());
65   - }*/
66   - }
67   -
68   - public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
69   - return cb.notEqual(expression, object);
70   - }
71   -
72   - public static Predicate in(CriteriaBuilder cb,Path<?> expression, Object object){
73   - String[] obj=object.toString().split(",");
74   - List<String> list=new ArrayList<String>();
75   - for(int i=0;i<obj.length;i++){
76   - list.add(obj[i]);
77   - }
78   - return cb.in(expression).value(list);
79   - }
80   -
81   -
82   - public static Predicate ins(CriteriaBuilder cb,Path<?> expression, List<String> list){
83   - return cb.in(expression).value(list);
84   - }
85   -
86   - public static Predicate gt(CriteriaBuilder cb,Path<Number> expression, Object object){
87   - try {
88   - return cb.gt(expression, nf.parse(object.toString()));
89   - } catch (ParseException e) {
90   - e.printStackTrace();
91   - return null;
92   - }
93   - }
94   -
95   - public static Predicate ge(CriteriaBuilder cb,Path<?> expression, Object object){
96   - Class<?> leftType = expression.getJavaType();
97   - Class<?> rightType = object.getClass();
98   -
99   - if (Number.class.isAssignableFrom(leftType) &&
100   - (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
101   - return cb.ge((Path<Number>) expression, (Number) object);
102   - } else if (String.class.isAssignableFrom(leftType) &&
103   - (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
104   - return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
105   - } else if (Date.class.isAssignableFrom(leftType) &&
106   - Date.class.isAssignableFrom(rightType)) { // Date >= Date
107   - return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
108   - } else if (Date.class.isAssignableFrom(leftType) &&
109   - String.class.isAssignableFrom(rightType)) { // Date >= String
110   - DateTime dateTime = new DateTime(object);
111   - return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
112   - } else if (long.class.isAssignableFrom(leftType) &&
113   - String.class.isAssignableFrom(rightType)) { // Long >= String
114   - return cb.greaterThanOrEqualTo((Path<Long>) expression, Long.valueOf(object+""));
115   - } else {
116   - throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
117   - }
118   - }
119   -
120   - public static Predicate lt(CriteriaBuilder cb,Path<Number> expression, Object object){
121   - try {
122   - return cb.lt(expression, nf.parse(object.toString()));
123   - } catch (ParseException e) {
124   - e.printStackTrace();
125   - return null;
126   - }
127   - }
128   -
129   - public static Predicate le(CriteriaBuilder cb,Path<?> expression, Object object){
130   - Class<?> leftType = expression.getJavaType();
131   - Class<?> rightType = object.getClass();
132   -
133   -
134   - if (Number.class.isAssignableFrom(leftType) &&
135   - (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
136   - return cb.le((Path<Number>) expression, (Number) object);
137   - } else if (String.class.isAssignableFrom(leftType) &&
138   - (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
139   - return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
140   - } else if (Date.class.isAssignableFrom(leftType) &&
141   - Date.class.isAssignableFrom(rightType)) { // Date <= Date
142   - return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
143   - } else if (Date.class.isAssignableFrom(leftType) &&
144   - String.class.isAssignableFrom(rightType)) { // Date <= String
145   - DateTime dateTime = new DateTime(object);
146   - return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
147   - }else if (long.class.isAssignableFrom(leftType) &&
148   - String.class.isAssignableFrom(rightType)) { // Long <= String
149   - return cb.lessThanOrEqualTo((Path<Long>) expression, Long.valueOf(object + "") );
150   - } else {
151   - throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
152   - }
153   - }
154   -
155   - public static Predicate prefixLike(CriteriaBuilder cb,Path<String> expression, Object object){
156   - return cb.like(expression, object.toString() + "%");
157   - }
158   -
159   - public static Predicate prefixNotLike(CriteriaBuilder cb,Path<String> expression, Object object){
160   - return cb.notLike(expression, object.toString() + "%");
161   - }
162   -
163   - public static Predicate suffixLike(CriteriaBuilder cb,Path<String> expression, Object object){
164   - return cb.like(expression, "%" + object.toString());
165   - }
166   -
167   - public static Predicate suffixNotLike(CriteriaBuilder cb,Path<String> expression, Object object){
168   - return cb.notLike(expression, "%" + object.toString());
169   - }
170   -
171   - public static Predicate like(CriteriaBuilder cb,Path<String> expression, Object object){
172   - return cb.like(expression, "%" + object.toString() + "%");
173   - }
174   -
175   - public static Predicate notLike(CriteriaBuilder cb,Path<String> expression, Object object){
176   - return cb.notLike(expression, "%" + object.toString() + "%");
177   - }
178   -
179   - public static Predicate isNull(CriteriaBuilder cb,Path<String> expression, Object object){
180   - return cb.isNull(expression);
181   - }
182   -
183   - public static Predicate isNotNull(CriteriaBuilder cb,Path<String> expression, Object object){
184   - return cb.isNotNull(expression);
185   - }
186   -
187   - public static Predicate isf(CriteriaBuilder cb,Path<Boolean> expression, Object object){
188   - return cb.isFalse(expression);
189   - }
190   -
191   - public static Predicate ist(CriteriaBuilder cb,Path<Boolean> expression, Object object){
192   - return cb.isTrue(expression);
193   - }
194   -
195   - public static Predicate date(CriteriaBuilder cb,Path<?> expression, Object object){
196   - Date time = null;
197   - try {
198   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
199   - time = sdf.parse(object.toString());
200   - } catch (Exception e) {
201   - e.printStackTrace();
202   - }
203   - return cb.equal(expression, time);
204   - }
205   -
206   - public static Predicate dateEq(CriteriaBuilder cb,Path<?> expression, Object object){
207   - Predicate predicate = null;
208   - try {
209   - DateTime dateTime = new DateTime(object);
210   - Date startTime = dateTime.toDate();//设置起始时间
211   - Calendar c = Calendar.getInstance();
212   - c.setTime(startTime);
213   - c.add(Calendar.DAY_OF_MONTH, 1);
214   - // 设置结束时间,起始时间为结束时间加1天
215   - Date endTime = c.getTime();
216   - predicate = cb.between((Path<Date>) expression,startTime,endTime);
217   - } catch (Exception e) {
218   - e.printStackTrace();
219   - }
220   - return predicate;
221   - }
222   -}
  1 +package com.bsth.entity.search;
  2 +
  3 +import org.apache.poi.ss.formula.functions.T;
  4 +import org.joda.time.DateTime;
  5 +
  6 +import javax.persistence.criteria.CriteriaBuilder;
  7 +import javax.persistence.criteria.Path;
  8 +import javax.persistence.criteria.Predicate;
  9 +import java.text.NumberFormat;
  10 +import java.text.ParseException;
  11 +import java.text.SimpleDateFormat;
  12 +import java.util.*;
  13 +
  14 +/**
  15 + *
  16 + * @ClassName: PredicatesBuilder
  17 + * @author PanZhao
  18 + * @date 2016年3月16日 下午4:05:07
  19 + *
  20 + */
  21 +public class PredicatesBuilder {
  22 +
  23 + /**
  24 + * Number转换器
  25 + */
  26 + private static NumberFormat nf;
  27 +
  28 + static{
  29 + nf = NumberFormat.getInstance();
  30 + }
  31 +
  32 + public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){
  33 + Class<?> leftType = expression.getJavaType();
  34 + Class<?> rightType = object.getClass();
  35 +
  36 + if(Date.class.isAssignableFrom(leftType) &&
  37 + String.class.isAssignableFrom(rightType)){
  38 + DateTime dateTime = new DateTime(object);
  39 + return cb.equal(expression, dateTime.toDate());
  40 + }
  41 + else {
  42 + return cb.equal(expression, object);
  43 + }
  44 +
  45 + /*if (Number.class.isAssignableFrom(leftType) &&
  46 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number == Number/String
  47 + return cb.equal(expression, object);
  48 + } else if (String.class.isAssignableFrom(leftType) &&
  49 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String == String/Number
  50 + return cb.equal(expression, object);
  51 + } else if (Boolean.class.isAssignableFrom(leftType) &&
  52 + Boolean.class.isAssignableFrom(rightType)) {
  53 + return cb.equal(expression, object);
  54 + } else if (Date.class.isAssignableFrom(leftType) &&
  55 + Date.class.isAssignableFrom(rightType)) { // Date == Date
  56 + return cb.equal(expression, object);
  57 + } else if (Date.class.isAssignableFrom(leftType) &&
  58 + String.class.isAssignableFrom(rightType)) { // Date == String
  59 + DateTime dateTime = new DateTime(object);
  60 + return cb.equal(expression, dateTime.toDate());
  61 + } else {
  62 + throw new RuntimeException("eq 不支持类型组合:" + expression.getJavaType() + "==" + object.getClass());
  63 + }*/
  64 + }
  65 +
  66 + public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
  67 + return cb.notEqual(expression, object);
  68 + }
  69 +
  70 + public static Predicate in(CriteriaBuilder cb, Path<?> expression, Object object) {
  71 + String[] obj = object.toString().split(",");
  72 +
  73 + return ins(cb, expression, Arrays.asList(obj));
  74 + }
  75 +
  76 +
  77 + public static Predicate ins(CriteriaBuilder cb, Path<?> expression, List<String> list) {
  78 + CriteriaBuilder.In<Object> in = cb.in(expression);
  79 + for(int i = 0; i < list.size(); i++){
  80 + in.value(list.get(i));
  81 + }
  82 +
  83 + return in;
  84 + }
  85 +
  86 + public static Predicate gt(CriteriaBuilder cb,Path<Number> expression, Object object){
  87 + try {
  88 + return cb.gt(expression, nf.parse(object.toString()));
  89 + } catch (ParseException e) {
  90 + e.printStackTrace();
  91 + return null;
  92 + }
  93 + }
  94 +
  95 + public static Predicate ge(CriteriaBuilder cb,Path<?> expression, Object object){
  96 + Class<?> leftType = expression.getJavaType();
  97 + Class<?> rightType = object.getClass();
  98 +
  99 + if (Number.class.isAssignableFrom(leftType) &&
  100 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
  101 + return cb.ge((Path<Number>) expression, (Number) object);
  102 + } else if (String.class.isAssignableFrom(leftType) &&
  103 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
  104 + return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
  105 + } else if (Date.class.isAssignableFrom(leftType) &&
  106 + Date.class.isAssignableFrom(rightType)) { // Date >= Date
  107 + return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
  108 + } else if (Date.class.isAssignableFrom(leftType) &&
  109 + String.class.isAssignableFrom(rightType)) { // Date >= String
  110 + DateTime dateTime = new DateTime(object);
  111 + return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
  112 + } else if (long.class.isAssignableFrom(leftType) &&
  113 + String.class.isAssignableFrom(rightType)) { // Long >= String
  114 + return cb.greaterThanOrEqualTo((Path<Long>) expression, Long.valueOf(object+""));
  115 + } else {
  116 + throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
  117 + }
  118 + }
  119 +
  120 + public static Predicate lt(CriteriaBuilder cb,Path<Number> expression, Object object){
  121 + try {
  122 + return cb.lt(expression, nf.parse(object.toString()));
  123 + } catch (ParseException e) {
  124 + e.printStackTrace();
  125 + return null;
  126 + }
  127 + }
  128 +
  129 + public static Predicate le(CriteriaBuilder cb,Path<?> expression, Object object){
  130 + Class<?> leftType = expression.getJavaType();
  131 + Class<?> rightType = object.getClass();
  132 +
  133 +
  134 + if (Number.class.isAssignableFrom(leftType) &&
  135 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
  136 + return cb.le((Path<Number>) expression, (Number) object);
  137 + } else if (String.class.isAssignableFrom(leftType) &&
  138 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
  139 + return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
  140 + } else if (Date.class.isAssignableFrom(leftType) &&
  141 + Date.class.isAssignableFrom(rightType)) { // Date <= Date
  142 + return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
  143 + } else if (Date.class.isAssignableFrom(leftType) &&
  144 + String.class.isAssignableFrom(rightType)) { // Date <= String
  145 + DateTime dateTime = new DateTime(object);
  146 + return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
  147 + }else if (long.class.isAssignableFrom(leftType) &&
  148 + String.class.isAssignableFrom(rightType)) { // Long <= String
  149 + return cb.lessThanOrEqualTo((Path<Long>) expression, Long.valueOf(object + "") );
  150 + } else {
  151 + throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
  152 + }
  153 + }
  154 +
  155 + public static Predicate prefixLike(CriteriaBuilder cb,Path<String> expression, Object object){
  156 + return cb.like(expression, object.toString() + "%");
  157 + }
  158 +
  159 + public static Predicate prefixNotLike(CriteriaBuilder cb,Path<String> expression, Object object){
  160 + return cb.notLike(expression, object.toString() + "%");
  161 + }
  162 +
  163 + public static Predicate suffixLike(CriteriaBuilder cb,Path<String> expression, Object object){
  164 + return cb.like(expression, "%" + object.toString());
  165 + }
  166 +
  167 + public static Predicate suffixNotLike(CriteriaBuilder cb,Path<String> expression, Object object){
  168 + return cb.notLike(expression, "%" + object.toString());
  169 + }
  170 +
  171 + public static Predicate like(CriteriaBuilder cb,Path<String> expression, Object object){
  172 + return cb.like(expression, "%" + object.toString() + "%");
  173 + }
  174 +
  175 + public static Predicate notLike(CriteriaBuilder cb,Path<String> expression, Object object){
  176 + return cb.notLike(expression, "%" + object.toString() + "%");
  177 + }
  178 +
  179 + public static Predicate isNull(CriteriaBuilder cb,Path<String> expression, Object object){
  180 + return cb.isNull(expression);
  181 + }
  182 +
  183 + public static Predicate isNotNull(CriteriaBuilder cb,Path<String> expression, Object object){
  184 + return cb.isNotNull(expression);
  185 + }
  186 +
  187 + public static Predicate isf(CriteriaBuilder cb,Path<Boolean> expression, Object object){
  188 + return cb.isFalse(expression);
  189 + }
  190 +
  191 + public static Predicate ist(CriteriaBuilder cb,Path<Boolean> expression, Object object){
  192 + return cb.isTrue(expression);
  193 + }
  194 +
  195 + public static Predicate date(CriteriaBuilder cb,Path<?> expression, Object object){
  196 + Date time = null;
  197 + try {
  198 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  199 + time = sdf.parse(object.toString());
  200 + } catch (Exception e) {
  201 + e.printStackTrace();
  202 + }
  203 + return cb.equal(expression, time);
  204 + }
  205 +
  206 + public static Predicate dateEq(CriteriaBuilder cb,Path<?> expression, Object object){
  207 + Predicate predicate = null;
  208 + try {
  209 + DateTime dateTime = new DateTime(object);
  210 + Date startTime = dateTime.toDate();//设置起始时间
  211 + Calendar c = Calendar.getInstance();
  212 + c.setTime(startTime);
  213 + c.add(Calendar.DAY_OF_MONTH, 1);
  214 + // 设置结束时间,起始时间为结束时间加1天
  215 + Date endTime = c.getTime();
  216 + predicate = cb.between((Path<Date>) expression,startTime,endTime);
  217 + } catch (Exception e) {
  218 + e.printStackTrace();
  219 + }
  220 + return predicate;
  221 + }
  222 +}
... ...