DROP TABLE
IF
EXISTS `t_ asset_attribution`;
CREATE TABLE `t_ asset_attribution` (
`id` BIGINT ( 0 ) NOT NULL AUTO_INCREMENT COMMENT '资产归属-主键ID',
`asset_type` VARCHAR ( 50 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '资产类型',
`asset_class` VARCHAR ( 50 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '资产类别',
`asset_model` VARCHAR ( 50 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '资产型号',
`asset_manager` VARCHAR ( 50 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '资产管理人',
`data_status` VARCHAR ( 50 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '启用' COMMENT '数据状态(启用、禁用)',
`del_flag` VARCHAR ( 20 ) CHARACTER
SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT 'USE' COMMENT '是否删除(USE:使用;DELETE:删除)',
PRIMARY KEY ( `id` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER
SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '资产归属' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
上面是我数据表的字段,我想动态查询资产类型、资产类别、资产型号、资产管理人的数据
实现的方法:
//region 这段代码是一个静态方法 where(),用于生成一个 JPA Specification 对象,该对象可以用于动态查询 TAssetAttributionEntity 实体类的数据
/**
* 这段代码是一个静态方法 where(),用于生成一个 JPA Specification 对象,该对象可以用于动态查询 TAssetAttributionEntity 实体类的数据
*
* @param assetType 资产类型
* @param assetClass 资产类别
* @param assetModel 资产型号
* @param assetManager 资产管理人
* @return
*/
public static Specification<TAssetAttributionEntity> where(
String assetType,
String assetClass,
String assetModel,
String assetManager) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (assetType != null && !assetType.isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("assetType"), assetType));
}
if (assetClass != null && !assetClass.isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("assetClass"), assetClass));
}
if (assetModel != null && !assetModel.isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("assetModel"), assetModel));
}
if (assetManager != null && !assetManager.isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("assetManager"), assetManager));
}
predicates.add(criteriaBuilder.equal(root.get("delFlag"), "USE")); // 添加 delFlag 的查询条件
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
//endregion
//region 分页查询数据
/**
* 分页查询数据
*
* @param entity 查询的数据
* @param page 要查询的页码,从 0 开始计数
* @param size 每页的数据量
* @param sort 排序字段,默认根据创建时间排序
* @param sortOrder 正序还是倒序,默认是倒叙(desc)
* @return
*/
@Override
public BaseResponseModel pageQuery(TAssetAttributionDTO entity, int page, int size, String sort, String sortOrder) {
Sort.Direction direction = Sort.Direction.DESC;
//默认根据创建时间排序
String order = "created_time";
//region 排序字段不为空
if (sort != null && !sort.isEmpty()) {
if ("ASC".equalsIgnoreCase(sort)) {
direction = Sort.Direction.ASC;
}
if ("DESC".equalsIgnoreCase(sort)) {
direction = Sort.Direction.DESC;
}
}
//endregion
//region 排序字段根据传过来的数据排序
if (sortOrder != null && !sortOrder.isEmpty()) {
order = sortOrder;
}
//endregion
Pageable pageable = PageRequest.of(page, size, Sort.by(direction, order));
String assetType = entity.getAssetType();
String assetClass = entity.getAssetClass();
String assetModel = entity.getAssetModel();
String assetManager = entity.getAssetManager();
Page<TAssetAttributionEntity> entityPage;
if (StringUtils.isEmpty(assetType) && StringUtils.isEmpty(assetClass) && StringUtils.isEmpty(assetModel) && StringUtils.isEmpty(assetManager)) {
entityPage = tAssetAttributionRepository.findAll(pageable);
} else {
entityPage = tAssetAttributionRepository.findAll(where(assetType, assetClass, assetModel, assetManager), pageable);
}
List<TAssetAttributionEntity> mapList = entityPage.getContent();
if (mapList == null || mapList.size() == 0) {
return ResultUtil.dataReturn(true, "未查询到您要找的内容,请重新查找!", mapList);
} else {
return ResultUtil.dataReturn(true, "查询数据成功!", mapList);
}
}
//endregion