update:查询条件按类型转换支持pg

This commit is contained in:
ruying408
2025-05-12 20:15:01 +08:00
parent 509e2f1f4d
commit 6c1f44a565
2 changed files with 70 additions and 17 deletions

View File

@@ -10,6 +10,7 @@ import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.cool.core.enums.QueryModeEnum;
import com.cool.core.util.ConvertUtil;
import com.mybatisflex.annotation.Table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.query.QueryCondition;
@@ -97,7 +98,7 @@ public class CrudOption<T> {
public CrudOption<T> queryModeEnum(QueryModeEnum queryModeEnum) {
this.queryModeEnum = queryModeEnum;
if (ObjUtil.equal(queryModeEnum, QueryModeEnum.CUSTOM)
&& ObjUtil.isEmpty(asType)) {
&& ObjUtil.isEmpty(asType)) {
asType = Map.class;
}
return this;
@@ -127,16 +128,17 @@ public class CrudOption<T> {
private QueryWrapper build(QueryWrapper queryWrapper, Class<T> entityClass) {
if (ObjectUtil.isNotEmpty(fieldEq)) {
Arrays.stream(fieldEq).toList().forEach(filed -> {
Object obj = requestParams.get(StrUtil.toCamelCase(filed.getName()));
String filedName = StrUtil.toCamelCase(filed.getName());
Object obj = requestParams.get(filedName);
if (ObjUtil.isEmpty(obj)) {
return;
}
if (obj instanceof JSONArray) {
// 集合
queryWrapper.and(filed.in(((JSONArray)obj).toArray()));
queryWrapper.and(filed.in(ConvertUtil.covertListByClass(filedName, (JSONArray)obj, entityClass).toArray()));
} else {
// 对象
queryWrapper.and(filed.eq(obj));
queryWrapper.and(filed.eq(ConvertUtil.convertByClass(filedName, obj, entityClass)));
}
});
}
@@ -189,12 +191,12 @@ public class CrudOption<T> {
tableAlias = queryTable.getName() + ".";
}
String order = requestParams.getStr("order",
tableAnnotation.camelToUnderline() ? "create_time" : "createTime");
tableAnnotation.camelToUnderline() ? "create_time" : "createTime");
String sort = requestParams.getStr("sort", "desc");
if (StrUtil.isNotEmpty(order) && StrUtil.isNotEmpty(sort)) {
queryWrapper.orderBy(
tableAlias + (tableAnnotation.camelToUnderline() ? StrUtil.toUnderlineCase(order) : order),
sort.equals("asc"));
tableAlias + (tableAnnotation.camelToUnderline() ? StrUtil.toUnderlineCase(order) : order),
sort.equals("asc"));
}
}
}

View File

@@ -1,16 +1,13 @@
package com.cool.core.util;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.*;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.web.multipart.MultipartFile;
@@ -203,4 +200,58 @@ public class ConvertUtil {
private static String[] splitCamelCase(String input) {
return input.split("(?<=.)(?=[A-Z])");
}
/**
* 将给定的字段值转换为可序列化的形式
* 此方法旨在将一个对象的特定字段值转换为其相应的可序列化类型
* 它在序列化和反序列化过程中特别有用,确保字段值可以被正确处理
*
* @param fieldName 字段名称,用于查找字段类型
* @param fieldValue 待转换的字段值
* @param clazz 包含该字段的类
* @return 转换后的可序列化字段值,如果无法确定字段类型,则返回原始值
*/
public static Object convertByClass(String fieldName, Object fieldValue, Class<?> clazz) {
// 检查输入参数是否为空,如果字段名或字段值为空,则直接返回字段值
if (fieldName == null || fieldValue == null) {
return fieldValue;
}
// 获取字段类型
Class<?> fieldType = getFieldType(clazz, fieldName);
// 如果字段类型为空,则直接返回字段值
if (fieldType == null) {
return fieldValue;
}
// 使用Convert类的convert方法将字段值转换为字段类型
return Convert.convert(fieldType, fieldValue);
}
public static List<Object> covertListByClass(String fieldName, List<Object> fieldValue, Class<?> clazz) {
// 检查输入参数是否为空,如果字段名或字段值为空,则直接返回字段值
if (fieldName == null || fieldValue == null) {
return fieldValue;
}
// 获取字段类型
Class<?> fieldType = getFieldType(clazz, fieldName);
// 如果字段类型为空,则直接返回字段值
if (fieldType == null) {
return fieldValue;
}
return Collections.singletonList(Convert.toList(fieldType, fieldValue));
}
/**
* 获取指定类中指定字段的类型
*
* @param clazz 目标类
* @param fieldName 字段名称
* @return 字段的类型 Class如果字段不存在则返回 null
*/
public static Class<?> getFieldType(Class<?> clazz, String fieldName) {
Field field = ReflectUtil.getField(clazz, fieldName);
return field != null ? field.getType() : null;
}
}