用途

  1. 结合@JpaSelectOperator 使用 更好
  2. 可快速的完成单表的复杂查询

    1. 根据入参对象进行查询条件的封装
      1. where field = value and field2 like '%value%' or field3 <> value

        用法示例

        自动组装查询条件 CommUtils.getSelectBean2

  3. 根据条件实体的值进行组织查询结构

  4. 默认为 拼接添加为 and 查询条件为 ==,值为空的不进行组织 ```java @Autowired private UserService userService;

@PostMapping(“dyFind”) public ResultVO> dyFind(UserFindDTO userDTO){ JPAUtilExpandCriteria selectBean = CommUtils.getSelectBean2(userDTO); List all = userService.getJpaBasicsDao().findAll(selectBean); return ResultVO.successForData(User.to(all, UserVO.class)); }

  1. <a name="uOguL"></a>
  2. ## 自定义组装查询条件
  3. > - **根据实体获取**`**key**`
  4. > - `**Restrictions.like(User::getPhone, "123", true)**`
  5. > - **写死**`**key**`
  6. > - `**Restrictions.like("loginName", "user", true)**`
  7. ```java
  8. JPAUtilExpandCriteria<User> jpaSelect = new JPAUtilExpandCriteria<>();
  9. jpaSelect.or(Restrictions.like(User::getPhone, "123", true));
  10. jpaSelect.or(Restrictions.like("loginName", "user", true));
  11. jpaSelect.add(Restrictions.eq("address", "重庆", true));
  12. userService.getJpaBasicsDao().findAll(jpaSelect).forEach(System.out::println);

自定义getSelectBean

@JpaSelectOperator

  1. public static <T,B> JPAUtilExpandCriteria<T> getSelectBean(B bean) {
  2. JPAUtilExpandCriteria<T> jpaSelect = new JPAUtilExpandCriteria<>();
  3. Field[] fields = ReflectUtil.getFields(bean.getClass());
  4. for (Field field : fields) {
  5. String fieldName = field.getName();
  6. if ("serialVersionUID".equals(fieldName)) {
  7. continue;
  8. }
  9. Object fieldValue = ReflectUtil.getFieldValue(bean, field);
  10. JpaSelectOperator annotation = field.getAnnotation(JpaSelectOperator.class);
  11. if (null != annotation) {
  12. SimpleExpression simpleExpression = jpaSelectOperatorSwitch(annotation, fieldName, fieldValue);
  13. if(Objects.equals(annotation.connect(), SQLConnect.OR)){
  14. jpaSelect.or(simpleExpression);
  15. }else {
  16. jpaSelect.add(simpleExpression);
  17. }
  18. } else {
  19. jpaSelect.add(Restrictions.eq(fieldName, fieldValue, true));
  20. }
  21. }
  22. return jpaSelect;
  23. }

附带方法介绍

Restrictions可选值

参数说明:

  1. 实体字段名
  2. 查询添加数据值
  3. true 空值不做查询,false 不忽略空
  1. /**
  2. * 等于
  3. */
  4. EQ,
  5. /**
  6. * 不相等
  7. */
  8. NE,
  9. /**
  10. * 模糊
  11. */
  12. LIKE,
  13. /**
  14. * 模糊不包含
  15. */
  16. NOTLIKE,
  17. /**
  18. * 左模糊
  19. */
  20. LLIKE,
  21. /**
  22. * 右模糊
  23. */
  24. RLIKE,
  25. /**
  26. * 大于
  27. */
  28. GT,
  29. /**
  30. * 小于
  31. */
  32. LT,
  33. /**
  34. * 大于等于
  35. */
  36. GTE,
  37. /**
  38. * 小于等于
  39. */
  40. LTE,
  41. /**
  42. * 等于空值
  43. */
  44. ISNULL,
  45. /**
  46. * 空值
  47. */
  48. ISNOTNULL,

jpaSelect 可选值

  1. /**
  2. * 并且
  3. */
  4. AND,
  5. /**
  6. * 或者
  7. */
  8. OR