package com.lunhan.xxx.common.orm2;
|
|
import com.lunhan.xxx.common.orm2.enums.ColumnBasic;
|
import com.lunhan.xxx.common.orm2.enums.EnumCondition;
|
import com.lunhan.xxx.common.orm2.models.SqlCondition;
|
import com.lunhan.xxx.common.orm2.models.SqlParameter;
|
import com.lunhan.xxx.common.util.StringUtil;
|
|
import java.lang.reflect.Array;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.List;
|
|
public class ColumnBuilder {
|
public static String getColumnName(String tableName, String columnName) {
|
return tableName + "." + columnName;
|
}
|
|
public static SqlCondition equal(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.EQUAL, columnName, value);
|
}
|
|
public static SqlCondition notEqual(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.NOT_EQUAL, columnName, value);
|
}
|
|
public static SqlCondition lessThan(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.LESS_THAN, columnName, value);
|
}
|
|
public static SqlCondition lessOrEqual(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.LESS_OR_EQUAL, columnName, value);
|
}
|
|
public static SqlCondition greaterThan(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.GREATER_THAN, columnName, value);
|
}
|
|
public static SqlCondition greaterOrEqual(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.GREATER_OR_EQUAL, columnName, value);
|
}
|
|
public static SqlCondition like(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.LIKE, columnName, "%" + value.toString() + "%");
|
}
|
|
public static SqlCondition rightLike(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.LIKE, columnName, value.toString() + "%");
|
}
|
|
public static SqlCondition notLike(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.NOT_LIKE, columnName, "%" + value.toString() + "%");
|
}
|
|
public static SqlCondition notRightLike(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.NOT_LIKE, columnName, value.toString() + "%");
|
}
|
|
public static SqlCondition in(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.IN, columnName, value);
|
}
|
|
public static SqlCondition notIn(String columnName, Object value) {
|
return createSqlCondition(EnumCondition.NOT_IN, columnName, value);
|
}
|
|
public static String desc(String columnName) {
|
return columnName + EnumCondition.DESC.getCond();
|
}
|
|
public static String asc(String columnName) {
|
return columnName + EnumCondition.ASC.getCond();
|
}
|
|
//*******************************************************************//
|
|
private static SqlCondition createSqlCondition(EnumCondition cond, String columnName, Object value) {
|
String sql = columnName + cond.getCond();
|
List<SqlParameter> paramList = new ArrayList<>();
|
|
if (value instanceof ColumnBasic) {
|
sql += ((ColumnBasic) value).getColumnName();
|
paramList.add(new SqlParameter(columnName, value, null));
|
} else if (value instanceof Collection) {
|
SqlCondition splitResult = splitValue(columnName, ((Collection) value).toArray(), sql);
|
sql = splitResult.getSql();
|
paramList.addAll(splitResult.getParamList());
|
} else if (value.getClass().isArray()) {
|
SqlCondition splitResult = splitValue(columnName, value, sql);
|
sql = splitResult.getSql();
|
paramList.addAll(splitResult.getParamList());
|
} else {
|
sql += "?";
|
Integer paramType = SqlUtil.getParameterType(value);
|
paramList.add(new SqlParameter(columnName, value, paramType));
|
}
|
return new SqlCondition(sql, paramList);
|
}
|
|
private static SqlCondition splitValue(String columnName, Object value, String sql) {
|
List<SqlParameter> paramList = new ArrayList<>();
|
List<String> placeList = new ArrayList<>();
|
|
int length = Array.getLength(value);
|
if (length == 0) {
|
return new SqlCondition("(1=2)", paramList);
|
}
|
|
for (int i = 0; i < length; i++) {
|
Object item = Array.get(value, i);
|
Integer paramType = SqlUtil.getParameterType(item);
|
paramList.add(new SqlParameter(columnName + "_" + i, item, paramType));
|
placeList.add("?");
|
}
|
return new SqlCondition(sql + "(" + StringUtil.join(placeList, ",") + ")", paramList);
|
}
|
}
|