packagecom.fyun.common.utils.util;importcom.fyun.common.utils.annottaton.SQLGenerateFieId;importjava.lang.reflect.Field;importjava.math.BigDecimal;importjava.util.Collection;importjava.util.Date;/*** Copyright glbpay.com
*
* Created by wsp on 2018/9/5.
* Descripton:*/
public classSQLGenerateUtils {public static String whereSQLGenerate(Object o) throwsIllegalAccessException {if (o == null)return "";
StringBuffer sb= newStringBuffer();for(Field f : o.getClass().getDeclaredFields()) {
SQLGenerateFieId sqlField= f.getAnnotation(SQLGenerateFieId.class);if (null !=sqlField) {
String alias=sqlField.alias();if(StringUtils.isEmpty(alias))
alias= "";elsealias= alias + ".";
f.setAccessible(true);
Object ob=f.get(o);if (ob != null && (checkType(ob) ||isDate(ob))) {
String value= "";if(isDate(ob)) {
value=DateUtil.format((Date) ob, sqlField.dateFormat());
}else if (ob instanceof Collection ||ob.getClass().isArray()) {
value=collectionToString((Collection) ob);
}else{
value=String.valueOf(ob);
}if(StringUtils.isEmpty(value))continue;if (sqlField.column().length == 1) {//单个字段
if (StringUtils.isNotEmpty(sqlField.column()[0])) {
sb.append(" and " + alias + Underline2CamelUtils.camel2Underline(sqlField.column()[0]) + " ");
}else{
sb.append(" and " + alias + Underline2CamelUtils.camel2Underline(f.getName()) + " ");
}
symbolSql(sb, sqlField, value);
}else if (sqlField.column().length > 1) {//多个字段
boolean first = true;
sb.append("and ( ");for(String column : sqlField.column()
) {if (!first) {
sb.append(" or ");
}else{
first= false;
}
sb.append(alias);
sb.append(Underline2CamelUtils.camel2Underline(column)+ " ");
symbolSql(sb, sqlField, value);
}
sb.append(" )");
}
}
}
}returnsb.toString();
}private static voidsymbolSql(StringBuffer sb, SQLGenerateFieId sqlField, String value) {if(SQLGenerateFieId.Like.equalsIgnoreCase(sqlField.Conform())) {
sb.append(sqlField.Conform()+ "'%" + value + "%' ");
}else if(SQLGenerateFieId.In.equalsIgnoreCase(sqlField.Conform())) {
sb.append(sqlField.Conform()+ " (" + value + ") ");
}else{
sb.append(sqlField.Conform()+ " '" + value + "' ");
}
}private staticString collectionToString(Collection obs) {
StringBuffer sb= newStringBuffer();if (obs.size() <= 0)return "";for(Object ob : obs
) {if(checkType(ob)) {
sb.append("'" + String.valueOf(ob) + "',");
}
}
String result=sb.toString();
result= result.substring(0, result.lastIndexOf(","));returnresult;
}private static booleanisDate(Object ob) {return ob instanceofDate;
}/*** 检查符合查询的对象类型 判断符合基础类型
*
*@paramparam
*@return
*/
private static booleancheckType(Object param) {boolean result = false;if (param instanceofInteger) {
result= true;
}else if (param instanceofShort) {
result= true;
}else if (param instanceofString) {
result= true;
}else if (param instanceofDouble) {
result= true;
}else if (param instanceofFloat) {
result= true;
}else if (param instanceofLong) {
result= true;
}else if (param instanceofBoolean) {
result= true;
}else if (param instanceofBigDecimal) {
result= true;
}else if (param instanceof Collection ||param.getClass().isArray()) {
result= true;
}returnresult;
}
}