1. 程式人生 > >redis叢集批量操作工具RedisBatchUtil

redis叢集批量操作工具RedisBatchUtil

redis叢集批量操作工具

RedisBatchUtil
package com.qzt360.data.action.sql;

import com.qzt360.data.action.annotation.Exclude;
import com.qzt360.data.action.annotation.Mark;
import com.qzt360.data.action.annotation.TableName;
import com.qzt360.data.action.annotation.Where;
import com.qzt360.data.action.entity.Eqp;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * @author luowuhui
 */
public class BatchSql {

    /**
     *
     * @param cla
     * @param condition
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> String batchSelect(Class<T> cla, List<String> condition) throws Exception {
        Field[] fields = cla.getDeclaredFields();
        String whereFielf = null;
        TableName tableName = cla.getAnnotation(TableName.class);
        Exclude exclude = cla.getAnnotation(Exclude.class);
        List<String> fieldList = new ArrayList<>((int) (fields.length * 0.75));
        boolean whereMark = false;
        if (exclude != null) {
            for (Field field : fields) {
                if (field.getAnnotation(Mark.class) == null) {
                    fieldList.add(field.getName());
                }
                if (!whereMark && field.getAnnotation(Where.class) != null) {
                    whereFielf = field.getName();
                    whereMark = true;
                }
            }
        } else {
            List<String> fieldAll = new ArrayList<>((int) (fields.length * 0.75));
            for (Field field : fields) {
                if (field.getAnnotation(Mark.class) != null) {
                    fieldList.add(field.getName());
                }
                if (!whereMark && field.getAnnotation(Where.class) != null) {
                    whereFielf = field.getName();
                    whereMark = true;
                }
                fieldAll.add(field.getName());
            }
            if (fieldList.size() == 0) {
                fieldList.addAll(fieldAll);
            }
        }

        StringBuilder sqlBuilder = new StringBuilder();
        sqlBuilder
                .append(getColumn(fieldList))
                .append("\n")
                .append("<select id=\"")
                .append(tableName.id())
                .append("\" resultType=\"")
                .append(cla.getName())
                .append("\" parameterType=\"")
                .append(condition.getClass().getInterfaces()[0].getName())
                .append("\">")
                .append("\n");

        sqlBuilder
                .append(" select")
                .append(" <include refid=\"fieldAll\" />")
                .append(" from ")
                .append(tableName.name())
                .append(" where")
                .append(whereFielf)
                .append(" in")
                .append("\n")
                .append(" <foreach collection=\"list\" item=\"" + whereFielf + "\" index=\"index\" open=\"(\" close=\")\" separator=\",\">")
                .append("\n")
                .append(" #{")
                .append(whereFielf)
                .append("}")
                .append("\n")
                .append("</foreach>")
                .append("\n")
                .append("</select>");
        return sqlBuilder.toString();
    }


    private static String getColumn(List<String> columns) {
        if (columns == null) {
            return "";
        }
        StringBuilder sqlColumn = new StringBuilder();
        columns.forEach(column -> sqlColumn.append(",").append(column));
        sqlColumn.delete(0, 1);
        sqlColumn.insert(0, "<sql id=\"fieldAll\">");
        sqlColumn.append("</sql>");
        return sqlColumn.toString();
    }

    public static void main(String[] args) throws Exception {
        System.out.println(   batchSelect(Eqp.class, new ArrayList<>()));
    }
}