基于java反射机制获取类型和字段信息来生成代码

基于java反射机制获取类型和字段信息来生成代码

一、反射获取类信息的描述

package com.clazz;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Locale;

/**
 * 反射获取类信息的描述
 */
@Data
@NoArgsConstructor
public class ClassInfoDesc {
    // 类的名称
    private String className ;
    // 对象的引用
    private String classReference ;

    public ClassInfoDesc(String className) {
        this.className = className;
        this.classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);
    }

    public static String getClassReference(String className){
        return className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);
    }

}

二、反射获取字段信息

package com.clazz;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Locale;

/**
 * 反射获取字段信息
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FieldInfoDesc {
    // 是否是静态变量
    private Boolean isTrue;
    // 字段名称
    private String fieldName;
    // 字段名称首字母大写
    private String fieldNameUpperCase;
    // 字段类型
    private Class<?> fieldClass ;
    // 字段类型名称
    private String fieldClassName;

    public static  String getfieldNameUpperCase(String fieldName){
        return fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
    }
}

三、类和字段的信息

package com.clazz;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GenerateCodeInfo {
    // 类信息
    private ClassInfoDesc classInfoDesc;
    // 字段信息
    private List<FieldInfoDesc> fieldInfoDescList;

    public static GenerateCodeInfo getGenerateCodeInfo(Class<?> clazz){
        // 类
        String className = clazz.getSimpleName();
        // 对象的引用
        ClassInfoDesc classInfoDesc = new ClassInfoDesc(className);
        List<FieldInfoDesc> fieldInfoDescList = new ArrayList<>();
        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();
        // 查询设置
        for (Field field : fields) {
            FieldInfoDesc fieldInfoDesc = new FieldInfoDesc();
            fieldInfoDesc.setIsTrue(Modifier.isStatic(field.getModifiers()));

            String fieldName = field.getName();
            fieldInfoDesc.setFieldName(fieldName);
            fieldInfoDesc.setFieldNameUpperCase(FieldInfoDesc.getfieldNameUpperCase(fieldName));

            Class<?> type = field.getType()  ;
            fieldInfoDesc.setFieldClass(type);
            fieldInfoDesc.setFieldClassName(type.getSimpleName());
            fieldInfoDescList.add(fieldInfoDesc);
        }
        List<FieldInfoDesc> collect = fieldInfoDescList.stream()
                .filter(item->item.getIsTrue().equals(false))
                .collect(Collectors.toList());

        GenerateCodeInfo generateCodeInfo = new GenerateCodeInfo();
        generateCodeInfo.setClassInfoDesc(classInfoDesc);
        generateCodeInfo.setFieldInfoDescList(collect);
        return generateCodeInfo;
    }
}

四、基于Mybatis-plus生成更新和查询的代码模板

package com.clazz;

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

public class MybatisPlusGenerate {

    /**
     * 根据类生成查询数据值
     * @param clazz 类名称
     */
    public static void createLambdaQueryWrapper(Class<?>  clazz) {
        // 类的名称
        String className = clazz.getSimpleName();
        // 对象的引用
        String classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);

        String methodsPrefix = "public static LambdaQueryWrapper<%s> getLambdaQueryWrapper(%s %s){";
        String methodsPrefixFormat = String.format(methodsPrefix, className, className, classReference);

        System.out.println(methodsPrefixFormat);

        String lambdaUpdateWrapperTemplate = "LambdaQueryWrapper<%s> lambdaQueryWrapper = Wrappers.lambdaQuery();";
        String lambdaUpdateWrapperTemplateFormat = String.format(lambdaUpdateWrapperTemplate, className);
        System.out.println(lambdaUpdateWrapperTemplateFormat);

        List<String> queryList = new ArrayList<>();
        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();
        // 查询设置
        for (Field field : fields) {
            // 是否是静态的字段
            boolean isTrue = Modifier.isStatic(field.getModifiers());
            if (isTrue) {
                continue;
            }
            // 字段名称
            String fieldName = field.getName();
            // 字段名称大写
            String fieldUpperCase = fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
            // 字段类型
            Class<?> type = field.getType();
            // 字段类型名称
            String fieldClassName = type.getSimpleName();

            if(String.class.equals(type)){
                String fieldQueryTemplate = "lambdaQueryWrapper.eq(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);
                queryList.add(fieldQueryTemplateFormat);

            }else {
                String fieldQueryTemplate = "lambdaQueryWrapper.eq(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);
                queryList.add(fieldQueryTemplateFormat);
            }
        }
        queryList.forEach(System.out::println);
        String methodsSuffix = " return lambdaQueryWrapper; \n}";
        String methodsSuffixFormat = String.format(methodsSuffix, className, className, classReference);
        System.out.println(methodsSuffixFormat);
    }

    /**
     * 根据类生成更新数据值
     * @param clazz  类名称
     */
    public static void createLambdaUpdateWrapper(Class<?>  clazz ) {
        // 类的名称
        String className = clazz.getSimpleName();
        // 对象的引用
        String classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);

        String methodsPrefix = "public static LambdaUpdateWrapper<%s> getLambdaUpdateWrapper(%s %s){";
        String methodsPrefixFormat = String.format(methodsPrefix, className, className, classReference);

        System.out.println(methodsPrefixFormat);

        String lambdaUpdateWrapperTemplate = "LambdaUpdateWrapper<%s> lambdaUpdateWrapper = Wrappers.lambdaUpdate();";
        String lambdaUpdateWrapperTemplateFormat = String.format(lambdaUpdateWrapperTemplate, className);
        System.out.println(lambdaUpdateWrapperTemplateFormat);


        List<String> updateList = new ArrayList<>();
        List<String> queryList = new ArrayList<>();
        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();
        // 查询设置
        for (Field field : fields) {
            // 是否是静态的字段
            boolean isTrue = Modifier.isStatic(field.getModifiers());
            if (isTrue) {
                continue;
            }
            // 字段名称
            String fieldName = field.getName();
            // 字段名称大写
            String fieldUpperCase = fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
            // 字段类型
            Class<?> type = field.getType();
            // 字段类型名称
            String fieldClassName = type.getSimpleName();
            /**
             * lambdaUpdateWrapper.eq(StrUtil.isNotBlank(exceptionLog.getExceptionMessage()),ExceptionLog::getExceptionMessage,exceptionLog.getExceptionMessage());
             */
            if(String.class.equals(type)){
                String fieldQueryTemplate = "lambdaUpdateWrapper.eq(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);

                String fieldUpdateTemplate = "lambdaUpdateWrapper.set(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldUpdateTemplateFormat = String.format(fieldUpdateTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);

                queryList.add(fieldQueryTemplateFormat);
                updateList.add(fieldUpdateTemplateFormat);
            }else {
                String fieldQueryTemplate = "lambdaUpdateWrapper.eq(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);

                String fieldUpdateTemplate = "lambdaUpdateWrapper.set(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldUpdateTemplateFormat = String.format(fieldUpdateTemplate, classReference, fieldUpperCase, className,fieldUpperCase,classReference, fieldUpperCase);

                queryList.add(fieldQueryTemplateFormat);
                updateList.add(fieldUpdateTemplateFormat);
            }
        }

        queryList.forEach(System.out::println);
        updateList.forEach(System.out::println);

        String methodsSuffix = " return lambdaUpdateWrapper; \n}";
        String methodsSuffixFormat = String.format(methodsSuffix, className, className, classReference);
        System.out.println(methodsSuffixFormat);
    }
}

五、基于类型生成常用方法的代码模板

package com.clazz;

import com.mybatis.WrapperTemplateUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum ClassTypeEnum {

    /**
     * 字符串类型查询
     * 1.模糊
     * 2.精确查询
     * 3.不等于
     */
    STRING(String.class, "字符串类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return String.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            // 更新填充字段的值
            String fillStringTemplate = " public static void lambdaUpdate%s (LambdaUpdateWrapper<%s> lambdaUpdateWrapper, %s  %s ) {lambdaUpdateWrapper.set(StrUtil.isNotBlank(%s.get%s()), %s::get%s, %s.get%s());}";
            // 字符串模板,生成代码
            String format = String.format(fillStringTemplate,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) { lambdaQueryWrapper.eq(StrUtil.isNotBlank(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            //     public static Map<String, List<Test01>> getMyNameMapByStream(List<Test01> test01List){return CollStreamUtil.groupByKey(test01List, Test01::getMyName);}
            String fieldGroupTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldGroupTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            /**
             *     public static Map<String,Integer> groupStatisticsByMyName(List<Test01> test01List ){
             *         Map<String, List<Test01>> groupMap = CollStreamUtil.groupByKey(test01List,Test01::getMyName);
             *         Map<String,Integer> map = new HashMap<>();
             *         groupMap.forEach((key,value)->map.put(key,value.size()));
             *         return map;
             *     }
             */
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }


    },

    /**
     * 布尔类型查询
     * 1.精确查询
     */
    BOOLEAN(Boolean.class, "布尔类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return Boolean.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase,  String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase,String fieldSimpleName,  String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 整形数字查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    INTEGER(Integer.class, "整形") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return Integer.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase,String fieldSimpleName,  String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 长整形数字查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    LONG(Long.class, "长整形") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return Long.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 浮点数字查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    DOUBLE(Double.class, "浮点类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return Double.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 精确数字查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    BIGDECIMAL(BigDecimal.class, "精确数字类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return BigDecimal.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 日期查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    DATE(Date.class, "日期类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return Date.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    },

    /**
     * 日期查询
     * 1.范围查询
     * 2.精确查询
     * 3.大于
     * 4.大于等于
     * 5.小于
     * 6.小于等于
     * 7.不等于
     */
    LOCALDATETIME(LocalDateTime.class, "新日期类型") {
        @Override
        public Boolean checkClassType(Class clazz) {
            return LocalDateTime.class.equals(clazz);
        }

        @Override
        public void fillLambdaUpdateField(String fieldUpperCase, String classSimpleName, String reference) {
            String format = String.format(WrapperTemplateUtil.OBJECT_FIELD_FILL_LAMBDAUPDATE_TEMPLATE,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void fillLambdaQueryField(String fieldUpperCase, String classSimpleName, String reference) {
            String template = "public static void lambdaQuery%s (LambdaQueryWrapper<%s> lambdaQueryWrapper, %s  %s ) {lambdaQueryWrapper.eq(ObjectUtil.isEmpty(%s.get%s()), %s::get%s, %s.get%s());}";

            // 字符串模板,生成代码
            String format = String.format(template,
                    fieldUpperCase,
                    classSimpleName,
                    classSimpleName,
                    reference,
                    reference,
                    fieldUpperCase,
                    classSimpleName,
                    fieldUpperCase,
                    reference,
                    fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createFieldListByStream(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static List<%s> get%sListByStream(List<%s> %sList){return CollStreamUtil.toList(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupByField(String fieldUpperCase, String fieldSimpleName, String classSimpleName, String reference) {
            String fieldListTemplate = "public static Map<%s, List<%s>> groupBy%s(List<%s> %sList){return CollStreamUtil.groupByKey(%sList,%s::get%s);}";
            String format =String.format(fieldListTemplate,fieldSimpleName,classSimpleName,fieldUpperCase,classSimpleName,reference,reference,classSimpleName,fieldUpperCase);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference) {
            String groupStatisticsTemplate = "public static Map<%s,Integer> groupStatisticsBy%s(List<%s> %sList ){\n" +
                    "    Map<%s, List<%s>> groupMap = CollStreamUtil.groupByKey(%sList,%s::get%s);\n" +
                    "    Map<%s,Integer> map = new HashMap<>();\n" +
                    "    groupMap.forEach((key,value)->map.put(key,value.size()));\n" +
                    "    return map;\n" +
                    "}";

            String format =String.format(groupStatisticsTemplate,fieldClassName,fieldName,
                    className,classReference,fieldClassName,className,classReference,className,fieldName,fieldClassName);
            System.out.println(format);
            System.out.println();
        }

        @Override
        public void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }

        @Override
        public void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference) {

        }
    };

    private Class clazz;

    private String desc;

    /**
     * 检查类型
     *
     * @param clazz 类类型
     * @return
     */
    public abstract Boolean checkClassType(Class clazz);

    /**
     * 根据类型填充字段
     *
     * @param fieldName 字段名称
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void fillLambdaUpdateField(String fieldName, String className, String classReference);

    /**
     * 根据类型填充字段
     *
     * @param fieldName 字段名称
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void fillLambdaQueryField(String fieldName, String className, String classReference);


    /**
     * 获取字段的列表
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void createFieldListByStream(String fieldName, String fieldClassName, String className, String classReference);

    /**
     * 分组
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void groupByField(String fieldName, String fieldClassName, String className, String classReference);


    /**
     * 分组统计
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void groupStatisticsByField(String fieldName, String fieldClassName, String className, String classReference);

    /**
     * 创建 UpdateWrapper
     *
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void createUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference);

    /**
     * 创建 QueryWrapper
     *
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void createQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference);

    /**
     * 创建 LambdaQueryWrapper
     *
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void createLambdaQueryWrapperByField(String fieldName, String fieldClassName, String className, String classReference);

    /**
     * 创建 LambdaUpdateWrapper
     *
     * @param fieldName 字段名称
     * @param fieldClassName 字段类型
     * @param className 类名称
     * @param classReference 类引用
     */
    public abstract void createLambdaUpdateWrapperByField(String fieldName, String fieldClassName, String className, String classReference);

}

六、生成代码测试

package com.clazz;

import com.alibaba.fastjson.JSON;
import com.java8.Test01;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

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

@Slf4j
public class ClassTest {
    @Test
    public void test1() {
        // 类
        Class<Test01> clazz = Test01.class;
        // 类的名称
        String className = clazz.getSimpleName();
        // 对象的引用
        String classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);
        System.out.println("clazz:" + clazz);
        System.out.println("reference:" + classReference);

        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {
            // 是否是静态的字段
            boolean isTrue = Modifier.isStatic(field.getModifiers());
            if (isTrue) {
                continue;
            }
            // 字段名称
            String fieldName = field.getName();
            // 字段名称大写
            String fieldUpperCase = fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
            // 字段类型
            Class<?> type = field.getType();
            // 字段类型名称
            String fieldClassName = type.getSimpleName();


            // 获取字段的类型
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));

            // 根据类型来操作
            classType.fillLambdaUpdateField(fieldUpperCase, className, classReference);

            // 根据类型来操作
            classType.fillLambdaQueryField(fieldUpperCase, className, classReference);

            // 生成列表填充
            classType.createFieldListByStream(fieldUpperCase, fieldClassName, className, classReference);

            // 生成Map填充
            classType.groupByField(fieldUpperCase, fieldClassName, className, classReference);
        }

    }


    @Test
    public void createLambdaUpdateWrapper() {
        // 类
        Class<Test01> clazz = Test01.class;
        // 类的名称
        String className = clazz.getSimpleName();
        // 对象的引用
        String classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);

        String methodsPrefix = "public static LambdaUpdateWrapper<%s> getLambdaUpdateWrapper(%s %s){";
        String methodsPrefixFormat = String.format(methodsPrefix, className, className, classReference);

        System.out.println(methodsPrefixFormat);

        String lambdaUpdateWrapperTemplate = "LambdaUpdateWrapper<%s> lambdaUpdateWrapper = Wrappers.lambdaUpdate();";
        String lambdaUpdateWrapperTemplateFormat = String.format(lambdaUpdateWrapperTemplate, className);
        System.out.println(lambdaUpdateWrapperTemplateFormat);


        List<String> updateList = new ArrayList<>();
        List<String> queryList = new ArrayList<>();
        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();
        // 查询设置
        for (Field field : fields) {
            // 是否是静态的字段
            boolean isTrue = Modifier.isStatic(field.getModifiers());
            if (isTrue) {
                continue;
            }
            // 字段名称
            String fieldName = field.getName();
            // 字段名称大写
            String fieldUpperCase = fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
            // 字段类型
            Class<?> type = field.getType();
            // 字段类型名称
            String fieldClassName = type.getSimpleName();
            /**
             * lambdaUpdateWrapper.eq(StrUtil.isNotBlank(exceptionLog.getExceptionMessage()),ExceptionLog::getExceptionMessage,exceptionLog.getExceptionMessage());
             */
            if (String.class.equals(type)) {
                String fieldQueryTemplate = "lambdaUpdateWrapper.eq(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);

                String fieldUpdateTemplate = "lambdaUpdateWrapper.set(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldUpdateTemplateFormat = String.format(fieldUpdateTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);

                queryList.add(fieldQueryTemplateFormat);
                updateList.add(fieldUpdateTemplateFormat);
            } else {
                String fieldQueryTemplate = "lambdaUpdateWrapper.eq(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);

                String fieldUpdateTemplate = "lambdaUpdateWrapper.set(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldUpdateTemplateFormat = String.format(fieldUpdateTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);

                queryList.add(fieldQueryTemplateFormat);
                updateList.add(fieldUpdateTemplateFormat);
            }
        }

        queryList.forEach(System.out::println);
        updateList.forEach(System.out::println);

        String methodsSuffix = " return lambdaUpdateWrapper; \n}";
        String methodsSuffixFormat = String.format(methodsSuffix, className, className, classReference);
        System.out.println(methodsSuffixFormat);
    }


    @Test
    public void createLambdaQueryWrapper() {
        // 类
        Class<Test01> clazz = Test01.class;
        // 类的名称
        String className = clazz.getSimpleName();
        // 对象的引用
        String classReference = className.substring(0, 1).toLowerCase(Locale.ENGLISH) + className.substring(1);

        String methodsPrefix = "public static LambdaQueryWrapper<%s> getLambdaQueryWrapper(%s %s){";
        String methodsPrefixFormat = String.format(methodsPrefix, className, className, classReference);

        System.out.println(methodsPrefixFormat);

        String lambdaUpdateWrapperTemplate = "LambdaQueryWrapper<%s> lambdaQueryWrapper = Wrappers.lambdaQuery();";
        String lambdaUpdateWrapperTemplateFormat = String.format(lambdaUpdateWrapperTemplate, className);
        System.out.println(lambdaUpdateWrapperTemplateFormat);

        List<String> queryList = new ArrayList<>();
        // 获取本类的字段
        Field[] fields = clazz.getDeclaredFields();
        // 查询设置
        for (Field field : fields) {
            // 是否是静态的字段
            boolean isTrue = Modifier.isStatic(field.getModifiers());
            if (isTrue) {
                continue;
            }
            // 字段名称
            String fieldName = field.getName();
            // 字段名称大写
            String fieldUpperCase = fieldName.substring(0, 1).toUpperCase(Locale.ENGLISH) + fieldName.substring(1);
            // 字段类型
            Class<?> type = field.getType();
            // 字段类型名称
            String fieldClassName = type.getSimpleName();

            if (String.class.equals(type)) {
                String fieldQueryTemplate = "lambdaQueryWrapper.eq(StrUtil.isNotBlank(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);
                queryList.add(fieldQueryTemplateFormat);

            } else {
                String fieldQueryTemplate = "lambdaQueryWrapper.eq(ObjectUtil.isNotEmpty(%s.get%s()),%s::get%s,%s.get%s());";
                String fieldQueryTemplateFormat = String.format(fieldQueryTemplate, classReference, fieldUpperCase, className, fieldUpperCase, classReference, fieldUpperCase);
                queryList.add(fieldQueryTemplateFormat);
            }
        }

        queryList.forEach(System.out::println);

        String methodsSuffix = " return lambdaQueryWrapper; \n}";
        String methodsSuffixFormat = String.format(methodsSuffix, className, className, classReference);
        System.out.println(methodsSuffixFormat);
    }


    @Test
    public void CreateGroupStatistics() {
        // 类
        GenerateCodeInfo generateCodeInfo = GenerateCodeInfo.getGenerateCodeInfo(Test01.class);
        log.info("generateCodeInfo is :{} ", JSON.toJSON(generateCodeInfo));

        ClassInfoDesc classInfoDesc = generateCodeInfo.getClassInfoDesc();
        List<FieldInfoDesc> fieldInfoDescList = generateCodeInfo.getFieldInfoDescList();
        for (FieldInfoDesc fieldInfoDesc : fieldInfoDescList) {
            String fieldClassName = fieldInfoDesc.getFieldClassName();
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));

            classType.groupStatisticsByField(fieldInfoDesc.getFieldNameUpperCase(), fieldClassName, classInfoDesc.getClassName(), classInfoDesc.getClassReference());
        }

    }

    @Test
    public void generateCodeSort() {
        final GenerateCodeInfo generateCodeInfo = GenerateCodeInfo.getGenerateCodeInfo(Test01.class);
        final ClassInfoDesc classInfoDesc = generateCodeInfo.getClassInfoDesc();
        final List<FieldInfoDesc> fieldInfoDescList = generateCodeInfo.getFieldInfoDescList();

        final String className = classInfoDesc.getClassName();
        final String classReference = classInfoDesc.getClassReference();

        fieldInfoDescList.forEach(item->{
            final String fieldClassName = item.getFieldClassName();
            final String fieldUpperCase = item.getFieldNameUpperCase();
            // 获取字段的类型
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));
            // 根据类型来操作
            classType.fillLambdaUpdateField(fieldUpperCase, className, classReference);
        });


        fieldInfoDescList.forEach(item->{
            final String fieldClassName = item.getFieldClassName();
            final String fieldUpperCase = item.getFieldNameUpperCase();
            // 获取字段的类型
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));
            // 根据类型来操作
            classType.fillLambdaQueryField(fieldUpperCase, className, classReference);
        });


        fieldInfoDescList.forEach(item->{
            final String fieldClassName = item.getFieldClassName();
            final String fieldUpperCase = item.getFieldNameUpperCase();
            // 获取字段的类型
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));
            // 根据类型来操作
            classType.createFieldListByStream(fieldUpperCase, fieldClassName, className, classReference);
        });


        fieldInfoDescList.forEach(item->{
            final String fieldClassName = item.getFieldClassName();
            final String fieldUpperCase = item.getFieldNameUpperCase();
            // 获取字段的类型
            ClassTypeEnum classType = ClassTypeEnum.valueOf(fieldClassName.toUpperCase(Locale.ENGLISH));
            // 根据类型来操作
            classType.groupByField(fieldUpperCase, fieldClassName, className, classReference);
        });
    }


    @Test
    public void test05() {
        MybatisPlusGenerate.createLambdaUpdateWrapper(Test01.class);
        MybatisPlusGenerate.createLambdaQueryWrapper(Test01.class);
    }

    public static void main(String[] args) {
        MybatisPlusGenerate.createLambdaUpdateWrapper(Test01.class);
        MybatisPlusGenerate.createLambdaQueryWrapper(Test01.class);
    }

//        public static void main(String[] args) {
//            // 类
//            GenerateCodeInfo generateCodeInfo = GenerateCodeInfo.getGenerateCodeInfo(Test01.class);
//            log.info("generateCodeInfo is :{} ", JSON.toJSON(generateCodeInfo));
//            String className = generateCodeInfo.getClassInfoDesc().getClassName();
//            String classReference = generateCodeInfo.getClassInfoDesc().getClassReference();
//            log.info("className is :{} ", className);
//            log.info("classReference is :{} ", classReference);
//
//            ClassInfoDesc classInfoDesc = generateCodeInfo.getClassInfoDesc();
//            List<FieldInfoDesc> fieldInfoDescList = generateCodeInfo.getFieldInfoDescList();
//            for (FieldInfoDesc fieldInfoDesc : fieldInfoDescList) {
//                String fieldNameUpperCase = fieldInfoDesc.getFieldNameUpperCase();
//
//            }
//        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值