抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

GenericQueryUtil用于快速构造通用查询对象,主要配合GenericExtendService使用,本章讲解可以构造哪些条件及使用方式。

使用通用查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 通用查询传输对象
UserBO bo = new UserBO();
bo.setPage(1);
bo.setPageSize(200);

// 实体对象,equal 查询可通过 vo 直接传值进行查询
User vo = new User();
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());
bo.setVo(vo);

// 通用查询对象
GenericQueryExample generic = new GenericQueryExample();
// 查询对象列表
List<GenericQuery> vos = new ArrayList<>();

// 查询对象
GenericQuery genericQuery = new GenericQuery();
// 属性名
genericQuery.setPropertyName("phone");
// 数据表列名
genericQuery.setColumnName("phone");
// 类型:日期 数值 字符 枚举
genericQuery.setType(GenericQueryExample.TYPE_STRING);
// 连接符
genericQuery.setOperation(GenericQueryExample.IS_EQUAL);
// 值
genericQuery.setValues(Collections.singletonList("13811112222"));
// 条件之前的关系,如果为最后一个需要设置为空,否则查询会报错
genericQuery.setConditionOperation(GenericQueryExample.CONDITIONOPERATION_AND);
// 前置括号
genericQuery.setFrontBrackets("(");
// 后置括号
genericQuery.setPostBrackets(")");
vos.add(genericQuery);

// 注意:vos添加GenericQuery的顺序会影响查询条件的生成,最后一个的连接符需要清空,否则查询会报错
// 配合GenericExtendService使用不需要单独处理下面这段逻辑
if (vos != null && vos > 0) {
vos.get(generic.getVos().size() - 1).setConditionOperation(null);
}

generic.setVos(vos);
bo.setGeneric(generic);

// 通用查询
Pagination<User> pagination = Pagination.getInstance4BO(userBO);
userService.search(pagination);

使用GenericQueryUtil简化代码

1
2
3
4
// 构造通用查询条件
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equalsOr("phone", GenericQueryExample.TYPE_STRING, "13812345678"));
vos.add(GenericQueryUtil.equals("phone", GenericQueryExample.TYPE_STRING, "13811112222"));

equals (eq)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“等于” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery equals(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询手机号为13812345678的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("phone", GenericQueryExample.TYPE_STRING, "13812345678"));
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));

// sql => phone = '13812345678' AND user_type = '2'

equalsOr (eq)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“等于” 连接符 “or”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery equalsOr(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询手机号为13812345678或13811112222的用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equalsOr("phone", GenericQueryExample.TYPE_STRING, "13812345678"));
vos.add(GenericQueryUtil.equals("phone", GenericQueryExample.TYPE_STRING, "13811112222"));

// sql => phone = '13812345678' OR phone = '13811112222'

notEquals (ne)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“不等于” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery notEquals(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例1:查询手机号不为13812345678的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.notEquals("phone", GenericQueryExample.TYPE_STRING, "13812345678"));
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));

// sql => phone <> '13812345678' AND user_type = '2'

notContain (not like)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“不包含于” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery notContain(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询手机号不包含138的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.notContain("phone", GenericQueryExample.TYPE_STRING, "138"));

// sql => user_type = '2' AND phone NOT LIKE '%138%'

notContain (not in)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“不包含于” 连接符 “and”
* 使用 not in 必须指定 type 为 enum,已默认为 enum,无需传 type
*
* @param columnName 列名属性
* @param value 属性值集合
* @return GenericQuery
*/
GenericQuery notContain(String columnName, List<String> value);

示例

1
2
3
4
5
6
7
8
9
// 例:查询手机号不包含13812345678和13811112222的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
List<String> value = new ArrayList<>();
value.add("13812345678");
value.add("13811112222");
vos.add(GenericQueryUtil.notContain("phone", value));

// sql => user_type = '2' AND phone NOT IN ('13812345678', '13811112222')

contain (like)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“包含于” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery contain(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询手机号包含138的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.contain("phone", GenericQueryExample.TYPE_STRING, "138"));

// sql => user_type = '2' AND phone LIKE '%138%'

contain (in)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“包含于” 连接符 “and”
* 使用 in 必须指定 type 为 enum,已默认为 enum,无需传 type
*
* @param columnName 列名属性
* @param value 属性值集合
* @return GenericQuery
*/
GenericQuery contain(String columnName, List<String> value);

示例

1
2
3
4
5
6
7
8
9
// 例:查询手机号包含13812345678和13811112222的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
List<String> value = new ArrayList<>();
value.add("13812345678");
value.add("13811112222");
vos.add(GenericQueryUtil.contain("phone", value));

// sql => user_type = '2' AND phone IN ('13812345678', '13811112222')

between

参数说明

1
2
3
4
5
6
7
8
9
10
/**
* 条件“范围” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value1 start值
* @param value2 end值
* @return GenericQuery
*/
GenericQuery between(String columnName, String type, String value1, String value2);

示例

1
2
3
4
5
6
7
8
// 例:查询11月份注册的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
String startDate = "2021-11-01 00:00:00";
String endDate = "2021-11-30 23:59:59";
vos.add(GenericQueryUtil.between("register_time", GenericQueryExample.TYPE_DATE, startDate, endDate));

// sql => user_type = '2' AND register_time BETWEEN '2021-11-01 00:00:00' AND '2021-11-30 23:59:59'

greaterThan (gt)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“大于” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery greaterThan(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询车辆数量大于0的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.greaterThan("vehicle_num", GenericQueryExample.TYPE_NUMBER, "0"));

// sql => user_type = '2' AND vehicle_num > '0'

greaterThanOrEqual (ge)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“大于等于” 连接符 “and'”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery greaterThanOrEqual(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询车辆数量大于等于5的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.greaterThanOrEqual("vehicle_num", GenericQueryExample.TYPE_NUMBER, "5"));

// sql => user_type = '2' AND vehicle_num >= '5'

lessThan (lt)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“小于” 连接符 “and'”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery lessThan(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询车辆数量小于5的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.lessThan("vehicle_num", GenericQueryExample.TYPE_NUMBER, "5"));

// sql => user_type = '2' AND vehicle_num < '5'

lessThanOrEqual (le)

参数说明

1
2
3
4
5
6
7
8
9
/**
* 条件“小于等于” 连接符 “and'”
*
* @param columnName 列名属性
* @param type 属性类型
* @param value 属性值
* @return GenericQuery
*/
GenericQuery lessThanOrEqual(String columnName, String type, String value);

示例

1
2
3
4
5
6
// 例:查询车辆数量小于等于5的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.lessThanOrEqual("vehicle_num", GenericQueryExample.TYPE_NUMBER, "5"));

// sql => user_type = '2' AND vehicle_num <= '5'

isNull

参数说明

1
2
3
4
5
6
7
8
/**
* 条件“等于空” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @return GenericQuery
*/
GenericQuery isNull(String columnName, String type);

示例

1
2
3
4
5
6
// 例:查询车辆数量为空的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.isNull("vehicle_num", GenericQueryExample.TYPE_NUMBER));

// sql => user_type = '2' AND IFNULL(vehicle_num, '') = ''

isNotNull

参数说明

1
2
3
4
5
6
7
8
/**
* 条件“不等于空” 连接符 “and”
*
* @param columnName 列名属性
* @param type 属性类型
* @return GenericQuery
*/
GenericQuery isNotNull(String columnName, String type);

示例

1
2
3
4
5
6
// 例:查询车辆数量不为空的企业用户
List<GenericQuery> vos = new ArrayList<>();
vos.add(GenericQueryUtil.equals("user_type", GenericQueryExample.TYPE_STRING, UserTypeEnum.ENTERPRISE.getCode()));
vos.add(GenericQueryUtil.isNotNull("vehicle_num", GenericQueryExample.TYPE_NUMBER));

// sql => user_type = '2' AND IFNULL(vehicle_num, '') <> ''