用途
- 结合@JpaSelectOperator 使用 更好
可快速的完成单表的复杂查询
根据条件实体的值进行组织查询结构
- 默认为 拼接添加为
and
查询条件为==
,值为空的不进行组织 ```java @Autowired private UserService userService;
@PostMapping(“dyFind”)
public ResultVO> dyFind(UserFindDTO userDTO){
JPAUtilExpandCriteria
<a name="uOguL"></a>
## 自定义组装查询条件
> - **根据实体获取**`**key**`
> - `**Restrictions.like(User::getPhone, "123", true)**`
> - **写死**`**key**`
> - `**Restrictions.like("loginName", "user", true)**`
```java
JPAUtilExpandCriteria<User> jpaSelect = new JPAUtilExpandCriteria<>();
jpaSelect.or(Restrictions.like(User::getPhone, "123", true));
jpaSelect.or(Restrictions.like("loginName", "user", true));
jpaSelect.add(Restrictions.eq("address", "重庆", true));
userService.getJpaBasicsDao().findAll(jpaSelect).forEach(System.out::println);
自定义getSelectBean
public static <T,B> JPAUtilExpandCriteria<T> getSelectBean(B bean) {
JPAUtilExpandCriteria<T> jpaSelect = new JPAUtilExpandCriteria<>();
Field[] fields = ReflectUtil.getFields(bean.getClass());
for (Field field : fields) {
String fieldName = field.getName();
if ("serialVersionUID".equals(fieldName)) {
continue;
}
Object fieldValue = ReflectUtil.getFieldValue(bean, field);
JpaSelectOperator annotation = field.getAnnotation(JpaSelectOperator.class);
if (null != annotation) {
SimpleExpression simpleExpression = jpaSelectOperatorSwitch(annotation, fieldName, fieldValue);
if(Objects.equals(annotation.connect(), SQLConnect.OR)){
jpaSelect.or(simpleExpression);
}else {
jpaSelect.add(simpleExpression);
}
} else {
jpaSelect.add(Restrictions.eq(fieldName, fieldValue, true));
}
}
return jpaSelect;
}
附带方法介绍
Restrictions
可选值
参数说明:
- 实体字段名
- 查询添加数据值
- true 空值不做查询,false 不忽略空
/**
* 等于
*/
EQ,
/**
* 不相等
*/
NE,
/**
* 模糊
*/
LIKE,
/**
* 模糊不包含
*/
NOTLIKE,
/**
* 左模糊
*/
LLIKE,
/**
* 右模糊
*/
RLIKE,
/**
* 大于
*/
GT,
/**
* 小于
*/
LT,
/**
* 大于等于
*/
GTE,
/**
* 小于等于
*/
LTE,
/**
* 等于空值
*/
ISNULL,
/**
* 空值
*/
ISNOTNULL,
jpaSelect
可选值
/**
* 并且
*/
AND,
/**
* 或者
*/
OR