All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.silentgo.orm.sqlparser.daoresolve.WhereDaoResolver Maven / Gradle / Ivy

package com.silentgo.orm.sqlparser.daoresolve;

import com.silentgo.orm.base.BaseDaoDialect;
import com.silentgo.orm.base.BaseTableInfo;
import com.silentgo.orm.base.SQLTool;
import com.silentgo.orm.base.TableModel;
import com.silentgo.orm.sqlparser.SQLKit;
import com.silentgo.orm.sqlparser.annotation.Where;
import com.silentgo.orm.sqlparser.annotation.WhereGroup;
import com.silentgo.orm.sqlparser.annotation.WhereJudge;
import com.silentgo.orm.sqlparser.funcanalyse.DaoKeyWord;
import com.silentgo.utils.StringKit;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * Project : SilentGo
 * Package : com.silentgo.orm.sqlparser.daoresolve
 *
 * @author teddyzhu
 *         

* Created by teddyzhu on 2016/10/28. */ public class WhereDaoResolver implements DaoResolver { @Override public boolean handle(String methodName, List parsedMethod, List annotations) { return parsedMethod.contains(DaoKeyWord.Where.innername); } @Override public SQLTool processSQL(String methodName, Class returnType, Object[] objects, Integer[] objectIndex, List parsedMethod, BaseTableInfo tableInfo, SQLTool sqlTool, List annotations, boolean[] isHandled, BaseDaoDialect daoDialect, Map nameObjects, Method method) { int index = parsedMethod.indexOf(DaoKeyWord.Where.innername); String tfield = DaoResolveKit.getField(parsedMethod, index + 1); if (DaoResolveKit.isField(tfield, tableInfo)) setWhere(index, DaoKeyWord.And.innername, parsedMethod, tableInfo, sqlTool, objectIndex, objects); Optional opWhere = annotations.stream().filter(annotation -> annotation.annotationType().equals(Where.class)).findFirst(); if (opWhere.isPresent()) { Where queryBy = (Where) opWhere.get(); for (String s : queryBy.value()) { sqlTool.where(SQLKit.buildParam(s, objectIndex, objects, sqlTool, nameObjects)); } } Optional opWhereGroup = annotations.stream().filter(annotation -> annotation.annotationType().equals(WhereGroup.class)).findFirst(); if (opWhereGroup.isPresent()) { WhereGroup whereGroup = (WhereGroup) opWhereGroup.get(); for (WhereJudge whereJudge : whereGroup.value()) { setWhereGroup(whereJudge, objectIndex, objects, nameObjects, sqlTool); } } return sqlTool; } private void setWhereGroup(WhereJudge whereJudge, Integer[] objectIndex, Object[] objects, Map namedObjects, SQLTool sqlTool) { Object object = namedObjects.get(whereJudge.value()); if (object == null) return; if (object instanceof String) { if (StringKit.isNotBlank((String) object)) { sqlTool.where(SQLKit.buildParam(whereJudge.condition(), objectIndex, objects, sqlTool, namedObjects)); } } else if (object instanceof Boolean) { if ((Boolean) object) { sqlTool.where(SQLKit.buildParam(whereJudge.condition(), objectIndex, objects, sqlTool, namedObjects)); } } } private void setWhere(int index, String string, List parsedMethod, BaseTableInfo tableInfo, SQLTool sqlTool, Integer[] objectIndex, Object[] objects) { if (DaoKeyWord.And.equals(string)) { String f = DaoResolveKit.getField(parsedMethod, tableInfo, index + 1); Object arg = SQLKit.getObject(objectIndex, objects); if (arg instanceof Collection) { sqlTool.whereIn(f, ((Collection) arg).size()); ((Collection) arg).forEach(sqlTool::appendParam); } else { sqlTool.whereEquals(f).appendParam(arg); } Integer nextIndex = index + 2; setWhere(nextIndex, DaoResolveKit.getField(parsedMethod, nextIndex), parsedMethod, tableInfo, sqlTool, objectIndex, objects); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy