简介
使用 GenericExtendService 将支持下面这些功能
- selectById 根据id查询,不返回已经软删除的数据
- selectLatestOne 根据指定字段排序,查询最新一条的数据
- selectOne 查询单条记录,存在多条抛出异常
- list 根据指定字段排序,查询列表
- listPage 根据通用查询对象参数,分页查询列表
- selectCount 查询数据行数
- selectDistinctColumns 去重查询,使用 DISTINCT 去重返回数据
- selectAggregationColumns 聚合查询,支持 SUM、AVG、MAX、MIN,COUNT
快速开始
1 2 3 4 5 6 7
| public class UserService extends GenericService<User, Long> { }
public class UserService extends GenericExtendService<User, Long> { }
|
使用示例
1. selectById
使用 get 方法,会将已经软删除的数据也会返回,部分业务场景可能不需要这部分数据,需要手动判断
1 2 3 4 5 6 7 8 9 10 11 12 13
| public User getById(Long id) { User data = super.get(id); if (data != null && data.getEnabledFlag().equals(EnabledFlag.ENABLED.getValue())) { return data; } return null; }
public User getById(Long id) { return super.selectById(id); }
|
2. selectLatestOne
根据指定字段排序,查询最新一条的数据
1 2 3 4 5 6 7 8 9 10 11
| T selectLatestOne(T vo, GenericQuery... vos);
T selectLatestOne(T vo, List<GenericQuery> vos);
T selectLatestOne(T vo, List<OrderByClause> orderByClauses, GenericQuery... vos);
T selectLatestOne(T vo, List<OrderByClause> orderByClauses, List<GenericQuery> vos);
|
使用示例
1 2 3 4 5 6 7 8 9 10 11 12
| 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);
|
3. selectOne
查询单条记录,存在多条抛出异常
1 2 3 4 5
| T selectOne(T vo, GenericQuery... 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
| 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
| List<T> list(GenericBO<T> bo);
T list(T vo, GenericQuery... vos);
T list(T vo, List<GenericQuery> vos);
T list(T vo, List<OrderByClause> orderByClauses, GenericQuery... vos);
T list(T vo, List<OrderByClause> orderByClauses, List<GenericQuery> vos);
|
使用示例
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());
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);
|
5. listPage
根据通用查询对象参数,分页查询列表,入参通用查询BO对象需要手动创建
1 2
| 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
| 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
| T selectCount(T vo, GenericQuery... vos);
T selectCount(T vo, List<GenericQuery> vos);
|
使用示例
1 2 3 4 5 6 7 8 9 10
| 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
| 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
| T selectAggregationColumns(T data, Aggregation... 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());
|