基于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();
//
// }
// }
}