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

简介

使用 GenericExtendService 将支持下面这些功能

  1. selectById 根据id查询,不返回已经软删除的数据
  2. selectLatestOne 根据指定字段排序,查询最新一条的数据
  3. selectOne 查询单条记录,存在多条抛出异常
  4. list 根据指定字段排序,查询列表
  5. listPage 根据通用查询对象参数,分页查询列表
  6. selectCount 查询数据行数
  7. selectDistinctColumns 去重查询,使用 DISTINCT 去重返回数据
  8. selectAggregationColumns 聚合查询,支持 SUM、AVG、MAX、MIN,COUNT

快速开始

1
2
3
4
5
6
7
// 原先继承 GenericService
public class UserService extends GenericService<User, Long> {
}

// 改为继承 GenericExtendService
public class UserService extends GenericExtendService<User, Long> {
}

使用示例

1. selectById

使用 get 方法,会将已经软删除的数据也会返回,部分业务场景可能不需要这部分数据,需要手动判断

1
2
3
4
5
6
7
8
9
10
11
12
13
// 使用 get 方法不返回软删除的数据需要 enabledFlag 状态
public User getById(Long id) {
User data = super.get(id);
if (data != null && data.getEnabledFlag().equals(EnabledFlag.ENABLED.getValue())) {
return data;
}
return null;
}

// 使用 selectById 方法无需对 enabledFlag 状态进行判断
public User getById(Long id) {
return super.selectById(id);
}

2. selectLatestOne

根据指定字段排序,查询最新一条的数据

1
2
3
4
5
6
7
8
9
10
11
// vo 实体参数,vos 通用查询参数
T selectLatestOne(T vo, GenericQuery... vos);

// vo 实体参数,vos 通用查询参数
T selectLatestOne(T vo, List<GenericQuery> vos);

// vo 实体参数,orderByClauses排序参数,vos 通用查询参数
T selectLatestOne(T vo, List<OrderByClause> orderByClauses, GenericQuery... vos);

// vo 实体参数,orderByClauses排序参数,vos 通用查询参数
T selectLatestOne(T vo, List<OrderByClause> orderByClauses, List<GenericQuery> vos);

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
// 根据创建时间排序,查询企业用户手机号包含138的最新的一个用户信息
User vo = new User();
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode()));

GenericQuery phoneCondition = GenericQueryUtil.contain("phone", GenericQueryExample.TYPE_STRING, "138");

// 创建时间降序
User user = super.selectLatestOne(vo, super.orderByDesc("creation_date"), phoneCondition);

// 不指定排序,默认id字段排序
// User user = super.selectLatestOne(vo, phoneCondition);

3. selectOne

查询单条记录,存在多条抛出异常

1
2
3
4
5
// vo 实体参数,vos 通用查询参数
T selectOne(T vo, GenericQuery... vos);

// vo 实体参数,vos 通用查询参数
T selectOne(T vo, List<GenericQuery> vos);

使用示例

1
2
3
4
5
6
// 根据用户编码查询用户信息
User vo = new User();
vo.setUserCode("YH202112270001");
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

User user = super.selectOne(vo);
1
2
3
4
5
6
7
8
9
10
// 查询11月份注册用户编码为YH202112270001的用户信息
User vo = new User();
vo.setUserCode("YH202112270001");
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

String startDate = "2021-11-01 00:00:00";
String endDate = "2021-11-30 23:59:59";
GenericQuery registerTimeQuery = GenericQueryUtil.between("register_time", GenericQueryExample.TYPE_DATE, startDate, endDate);

User user = super.selectOne(vo, registerTimeQuery);

4. list

根据指定字段排序,查询列表,为避免全表扫描,最大返回 20,000 条数据,此方法可作为 selectAll 的替代方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// bo 通用查询传输对象
List<T> list(GenericBO<T> bo);

// vo 实体参数,vos 通用查询参数
T list(T vo, GenericQuery... vos);

// vo 实体参数,vos 通用查询参数
T list(T vo, List<GenericQuery> vos);

// vo 实体参数,orderByClauses排序参数,vos 通用查询参数
T list(T vo, List<OrderByClause> orderByClauses, GenericQuery... vos);

// vo 实体参数,orderByClauses排序参数,vos 通用查询参数
T list(T vo, List<OrderByClause> orderByClauses, List<GenericQuery> vos);

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
// 查询11月份注册的企业用户列表
User vo = new User();
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode());
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

String startDate = "2021-11-01 00:00:00";
String endDate = "2021-11-30 23:59:59";
GenericQuery registerTimeQuery = GenericQueryUtil.between("register_time", GenericQueryExample.TYPE_DATE, startDate, endDate);

List<User> user = super.list(vo, registerTimeQuery);

// 可设置字段排序
// List<User> user = super.list(vo, super.orderByDesc("register_time"), registerTimeQuery);

5. listPage

根据通用查询对象参数,分页查询列表,入参通用查询BO对象需要手动创建

1
2
// bo 通用查询传输对象
List<T> listPage(GenericBO<T> bo);

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 分页查询11月份注册的企业用户列表
UserBO bo = new UserBO();
bo.setPage(1);
bo.setPageSize(1000);

User vo = new User();
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode());
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());
bo.setVo(vo);

String startDate = "2021-11-01 00:00:00";
String endDate = "2021-11-30 23:59:59";
GenericQuery registerTimeQuery = GenericQueryUtil.between("register_time", GenericQueryExample.TYPE_DATE, startDate, endDate);

GenericQueryExample generic = new GenericQueryExample();
generic.setVos(Collections.singletonList(registerTimeQuery));
bo.setGeneric(generic);

bo.setOrderByClauses(super.orderByDesc("register_time"));

List<User> user = super.listPage(bo);

6. selectCount

查询数据行数

1
2
3
4
5
// vo 实体参数,vos 通用查询参数
T selectCount(T vo, GenericQuery... vos);

// vo 实体参数,vos 通用查询参数
T selectCount(T vo, List<GenericQuery> vos);

使用示例

1
2
3
4
5
6
7
8
9
10
// 查询11月份注册的企业用户数量
User vo = new User();
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode());
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

String startDate = "2021-11-01 00:00:00";
String endDate = "2021-11-30 23:59:59";
GenericQuery registerTimeQuery = GenericQueryUtil.between("register_time", GenericQueryExample.TYPE_DATE, startDate, endDate);

int userCount = super.selectCount(vo, registerTimeQuery);

7. selectDistinctColumns

去重查询,使用 DISTINCT 去重返回数据

1
2
// data 实体对象,columnNames 所需DISTINCT去重字段名称
List<T> selectDistinctColumns(T data, String... columnNames);

使用示例

1
2
3
4
5
6
7
// 查询企业用户注册的省市有哪些
User vo = new User();
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode());
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

List<User> userList = super.selectDistinctColumns(vo, "province_name", "city_name");
userList.forEach(t -> System.out.println(t.getProvinceName() + t.getCityName()));

8. selectAggregationColumns

聚合查询,支持 SUM、AVG、MAX、MIN,COUNT

1
2
3
4
5
// data 实体对象,aggregations 聚合操作对象
T selectAggregationColumns(T data, Aggregation... aggregations);

// data 实体对象,aggregations 聚合操作对象
T selectAggregationColumns(T data, List<Aggregation> aggregationList);

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
// 统计企业用户数量和企业用户所有的车辆数量
User vo = new User();
vo.setUserType(UserTypeEnum.ENTERPRISE.getCode());
vo.setEnabledFlag(EnabledFlag.ENABLED.getValue());

List<Aggregation> aggregations = new ArrayList<>();
aggregations.add(new Aggregation(AggregationTypeEnum.COUNT, "id"));
aggregations.add(new Aggregation(AggregationTypeEnum.SUM, "vehicle_num"));

User user = super.selectAggregationColumns(vo, aggregations);

System.out.println("企业用户数量:" + user.getId());
System.out.println("企业用户所有车辆数量:" + user.getVehicleNum());