Search in sources :

Example 1 with Mapperable

use of indi.mybatis.flying.models.Mapperable in project mybatis.flying by limeng32.

the class SqlBuilder method buildSelectSql.

/**
 * 由传入的对象生成query sql语句
 *
 * @param clazz
 *            pojo Class
 * @return sql
 */
public static String buildSelectSql(Class<?> clazz, FlyingModel flyingModel) {
    String ignoreTag = flyingModel.getIgnoreTag();
    TableMapper tableMapper = buildTableMapper(getTableMappedClass(clazz));
    String tableName = tableMapper.getTableName();
    selectSql = new StringBuffer(SELECT_);
    for (Mapperable fieldMapper : tableMapper.getFieldMapperCache().values()) {
        if ((!fieldMapper.getIgnoreTagSet().contains(ignoreTag))) {
            selectSql.append(fieldMapper.getDbFieldName()).append(COMMA);
        }
    }
    if (selectSql.indexOf(COMMA) > -1) {
        selectSql.delete(selectSql.lastIndexOf(COMMA), selectSql.lastIndexOf(COMMA) + 1);
    }
    selectSql.append(FROM).append(tableName);
    whereSql = new StringBuffer(WHERE_);
    for (FieldMapper fieldMapper : tableMapper.getUniqueKeyNames()) {
        whereSql.append(fieldMapper.getDbFieldName());
        whereSql.append(EQUAL_POUND_OPENBRACE).append(fieldMapper.getFieldName()).append(COMMA).append(JDBCTYPE_EQUAL).append(fieldMapper.getJdbcType().toString()).append(CLOSEBRACE_AND_);
    }
    whereSql.delete(whereSql.lastIndexOf(AND), whereSql.lastIndexOf(AND) + 3);
    return selectSql.append(whereSql).toString();
}
Also used : TableMapper(indi.mybatis.flying.models.TableMapper) Mapperable(indi.mybatis.flying.models.Mapperable) FieldMapper(indi.mybatis.flying.models.FieldMapper)

Example 2 with Mapperable

use of indi.mybatis.flying.models.Mapperable in project mybatis.flying by limeng32.

the class SqlBuilder method dealMapperAnnotationIterationForCount.

private static void dealMapperAnnotationIterationForCount(Object object, StringBuffer fromSql, StringBuffer whereSql, TableName originTableName, Mapperable originFieldMapper, String fieldPerfix, AtomicInteger index, TableName lastTableName) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Map<?, ?> dtoFieldMap = PropertyUtils.describe(object);
    TableMapper tableMapper = buildTableMapper(getTableMappedClass(object.getClass()));
    QueryMapper queryMapper = buildQueryMapper(object.getClass(), getTableMappedClass(object.getClass()));
    TableName tableName = new TableName(tableMapper, index.getAndIncrement(), lastTableName.getMap());
    /*
		 * 在第一次遍历中,处理好fromSql。 如果originFieldMapper为null则可认为是第一次遍历
		 */
    if (originFieldMapper == null) {
        fromSql.append(tableName.sqlSelect());
    }
    /*
		 * 在非第一次遍历中,处理fieldPerfix和fromSql。
		 * 如果originFieldMapper和originTableName均不为null则可认为是非第一次遍历
		 */
    String temp = null;
    if (originFieldMapper != null && originTableName != null) {
        /* 处理fieldPerfix */
        temp = originFieldMapper.getFieldName();
        if (fieldPerfix != null) {
            temp = fieldPerfix + DOT + temp;
        }
        /* 处理fromSql */
        fromSql.append(_LEFT_JOIN_).append(tableName.sqlSelect()).append(_ON_).append(originTableName.sqlWhere()).append(originFieldMapper.getDbFieldName()).append(_EQUAL_).append(tableName.sqlWhere()).append(originFieldMapper.getDbAssociationUniqueKey());
    }
    /* 处理fieldMapper中的条件 */
    for (Mapperable fieldMapper : tableMapper.getFieldMapperCache().values()) {
        Object value = dtoFieldMap.get(fieldMapper.getFieldName());
        if (value == null) {
            continue;
        }
        /* 此处当value拥有TableMapper或QueryMapper标注时,开始进行迭代 */
        if (fieldMapper.isForeignKey()) {
            dealMapperAnnotationIterationForCount(value, fromSql, whereSql, tableName, fieldMapper, temp, index, tableName);
        } else {
            dealConditionEqual(whereSql, fieldMapper, tableName, temp, false, 0);
        }
    }
    /* 处理queryMapper中的“且”条件 */
    for (ConditionMapper conditionMapper : queryMapper.getConditionMapperCache().values()) {
        Object value = dtoFieldMap.get(conditionMapper.getFieldName());
        if (value == null) {
            continue;
        }
        dealConditionMapper(conditionMapper, value, whereSql, tableName, temp, false, 0);
    }
    /* 处理queryMapper中的“或”条件 */
    for (OrMapper orMapper : queryMapper.getOrMapperCache().values()) {
        Object value = dtoFieldMap.get(orMapper.getFieldName());
        if (value == null) {
            continue;
        }
        dealConditionOrMapper(orMapper, value, whereSql, tableName, temp);
    }
}
Also used : TableName(indi.mybatis.flying.models.TableName) ConditionMapper(indi.mybatis.flying.models.ConditionMapper) OrMapper(indi.mybatis.flying.models.OrMapper) TableMapper(indi.mybatis.flying.models.TableMapper) Mapperable(indi.mybatis.flying.models.Mapperable) QueryMapper(indi.mybatis.flying.models.QueryMapper)

Example 3 with Mapperable

use of indi.mybatis.flying.models.Mapperable in project mybatis.flying by limeng32.

the class SqlBuilder method dealMapperAnnotationIterationForSelectAll.

private static void dealMapperAnnotationIterationForSelectAll(Object object, StringBuffer selectSql, StringBuffer fromSql, StringBuffer whereSql, TableName originTableName, Mapperable originFieldMapper, String fieldPerfix, AtomicInteger index, TableName lastTableName, String ignoreTag) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Map<?, ?> dtoFieldMap = PropertyUtils.describe(object);
    TableMapper tableMapper = buildTableMapper(getTableMappedClass(object.getClass()));
    QueryMapper queryMapper = buildQueryMapper(object.getClass(), getTableMappedClass(object.getClass()));
    TableName tableName = null;
    if (lastTableName == null) {
        tableName = new TableName(tableMapper, index.getAndIncrement(), null);
    } else {
        tableName = new TableName(tableMapper, index.getAndIncrement(), lastTableName.getMap());
    }
    /*
		 * 在第一次遍历中,处理好selectSql和fromSql。 如果originFieldMapper为null则可认为是第一次遍历
		 */
    if (originFieldMapper == null) {
        fromSql.append(tableName.sqlSelect());
        for (Mapperable fieldMapper : tableMapper.getFieldMapperCache().values()) {
            if ((!fieldMapper.getIgnoreTagSet().contains(ignoreTag))) {
                selectSql.append(tableName.sqlWhere()).append(fieldMapper.getDbFieldName()).append(COMMA);
            }
        }
    }
    /*
		 * 在非第一次遍历中,处理fieldPerfix和fromSql。
		 * 如果originFieldMapper和originTableName均不为null则可认为是非第一次遍历
		 */
    String temp = null;
    if (originFieldMapper != null && originTableName != null) {
        /* 处理fieldPerfix */
        temp = originFieldMapper.getFieldName();
        if (fieldPerfix != null) {
            temp = fieldPerfix + DOT + temp;
        }
        /* 处理fromSql */
        fromSql.append(_LEFT_JOIN_).append(tableName.sqlSelect()).append(_ON_).append(originTableName.sqlWhere()).append(originFieldMapper.getDbFieldName()).append(_EQUAL_).append(tableName.sqlWhere()).append(originFieldMapper.getDbAssociationUniqueKey());
    }
    /* 处理fieldMapper中的条件 */
    for (Mapperable fieldMapper : tableMapper.getFieldMapperCache().values()) {
        Object value = dtoFieldMap.get(fieldMapper.getFieldName());
        if (value == null) {
            continue;
        }
        /* 此处当value拥有TableMapper或QueryMapper标注时,开始进行迭代 */
        if (fieldMapper.isForeignKey()) {
            dealMapperAnnotationIterationForSelectAll(value, selectSql, fromSql, whereSql, tableName, fieldMapper, temp, index, tableName, null);
        } else {
            dealConditionEqual(whereSql, fieldMapper, tableName, temp, false, 0);
        }
    }
    /* 处理queryMapper中的“且”条件 */
    for (ConditionMapper conditionMapper : queryMapper.getConditionMapperCache().values()) {
        Object value = dtoFieldMap.get(conditionMapper.getFieldName());
        if (value == null) {
            continue;
        }
        dealConditionMapper(conditionMapper, value, whereSql, tableName, temp, false, 0);
    }
    /* 处理queryMapper中的“或”条件 */
    for (OrMapper orMapper : queryMapper.getOrMapperCache().values()) {
        Object value = dtoFieldMap.get(orMapper.getFieldName());
        if (value == null) {
            continue;
        }
        dealConditionOrMapper(orMapper, value, whereSql, tableName, temp);
    }
}
Also used : TableName(indi.mybatis.flying.models.TableName) ConditionMapper(indi.mybatis.flying.models.ConditionMapper) OrMapper(indi.mybatis.flying.models.OrMapper) TableMapper(indi.mybatis.flying.models.TableMapper) Mapperable(indi.mybatis.flying.models.Mapperable) QueryMapper(indi.mybatis.flying.models.QueryMapper)

Aggregations

Mapperable (indi.mybatis.flying.models.Mapperable)3 TableMapper (indi.mybatis.flying.models.TableMapper)3 ConditionMapper (indi.mybatis.flying.models.ConditionMapper)2 OrMapper (indi.mybatis.flying.models.OrMapper)2 QueryMapper (indi.mybatis.flying.models.QueryMapper)2 TableName (indi.mybatis.flying.models.TableName)2 FieldMapper (indi.mybatis.flying.models.FieldMapper)1