diff --git a/.gitignore b/.gitignore index 03bf91f..a2e0f8f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,40 @@ buildNumber.properties # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) !/.mvn/wrapper/maven-wrapper.jar -.idea \ No newline at end of file +.idea + +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +.mvn +mvnw* + + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml index e29483c..cde7b54 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.gnerv.boot utils - 1.0.0-RELEASE + 1.0.1-RELEASE gnerv-utils @@ -25,6 +25,13 @@ spring-boot-starter-web + + + com.baomidou + mybatis-plus-boot-starter + 3.1.0 + + org.apache.poi @@ -46,4 +53,88 @@ + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + master + scm:git:git://github.com/gnerv/gnerv-utils.git + scm:git:ssh://github.com/gnerv/gnerv-utils.git + https://github.com/gnerv/gnerv-utils/tree/master + + + + + Gnerv LiGen + ligendwow@126.com + https://github.com/gnerv + + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + org.apache.maven.plugins + maven-clean-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.0 + + + attach-javadocs + + jar + + + + + + + diff --git a/src/main/java/com/gnerv/boot/annotation/ESExcel.java b/src/main/java/com/gnerv/boot/annotation/ESExcel.java new file mode 100644 index 0000000..80c8f40 --- /dev/null +++ b/src/main/java/com/gnerv/boot/annotation/ESExcel.java @@ -0,0 +1,25 @@ +package com.gnerv.boot.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * excel 实体对象注解 + *

+ * + * @author Gnerv LiGen + * @since 2019/8/28 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ESExcel { + + int columnIndex() default 0; + + String columnName() default ""; +} diff --git a/src/main/java/com/gnerv/boot/annotation/EntityExtend.java b/src/main/java/com/gnerv/boot/annotation/EntityExtend.java new file mode 100644 index 0000000..b9959ee --- /dev/null +++ b/src/main/java/com/gnerv/boot/annotation/EntityExtend.java @@ -0,0 +1,55 @@ +package com.gnerv.boot.annotation; + + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * 扩展类 注解 + * 对于使用mybatis-plus注解与数据库字段对应 + * 并且mapper接口继承了mybatis-plus的baseMapper的扩展类 + * 在不指定对应crud方法时 + * 将尝试使用通用crud方法 + * 否则必须指定对应crud方法 + *

+ * + * @author Gnerv LiGen + * @since 2019/9/4 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EntityExtend { + + // 被注入的对象 + Class clazz(); + + // mapper接口类 + Class mapper(); + + // 插入方法名 + String insert() default ""; + + // 删除方法名 + String delete() default ""; + + // 更新方法名 + String update() default ""; + + // 查询方法名 + String select() default ""; + + // 参数名 + String parameter() default ""; + + // 对应主表字段名 + String mColumn() default ""; + + // 对应从表字段名 + String sColumn() default ""; + +} diff --git a/src/main/java/com/gnerv/boot/annotation/ResultFilter.java b/src/main/java/com/gnerv/boot/annotation/ResultFilter.java new file mode 100644 index 0000000..83ca160 --- /dev/null +++ b/src/main/java/com/gnerv/boot/annotation/ResultFilter.java @@ -0,0 +1,24 @@ +package com.gnerv.boot.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * 返回参数过滤 + *

+ * + * @author Gnerv LiGen + * @since 2019/8/13 + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ResultFilter { + + String[] field() default {}; + +} diff --git a/src/main/java/com/gnerv/boot/common/EntityExtendBean.java b/src/main/java/com/gnerv/boot/common/EntityExtendBean.java new file mode 100644 index 0000000..6a8bcdd --- /dev/null +++ b/src/main/java/com/gnerv/boot/common/EntityExtendBean.java @@ -0,0 +1,21 @@ +package com.gnerv.boot.common; + +import com.gnerv.boot.annotation.EntityExtend; + +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 存储包含实体扩展类注解的类 + *

+ * + * @author Gnerv LiGen + * @since 2019/9/4 + */ +public class EntityExtendBean { + + public static Map BEANS_MAP = new HashMap<>(); + + +} diff --git a/src/main/java/com/gnerv/boot/config/EntityExtendConfig.java b/src/main/java/com/gnerv/boot/config/EntityExtendConfig.java new file mode 100644 index 0000000..215ce3b --- /dev/null +++ b/src/main/java/com/gnerv/boot/config/EntityExtendConfig.java @@ -0,0 +1,23 @@ +package com.gnerv.boot.config; + +import com.gnerv.boot.interceptor.EntityExtendInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + *

+ * 实体扩展配置 + *

+ * + * @author Gnerv LiGen + * @since 2019/9/4 + */ +@Configuration +public class EntityExtendConfig { + + @Bean + public EntityExtendInterceptor getEntityExtendInterceptor(){ + return new EntityExtendInterceptor(); + } + +} diff --git a/src/main/java/com/gnerv/boot/entity/BaseExtend.java b/src/main/java/com/gnerv/boot/entity/BaseExtend.java new file mode 100644 index 0000000..8020a41 --- /dev/null +++ b/src/main/java/com/gnerv/boot/entity/BaseExtend.java @@ -0,0 +1,39 @@ +package com.gnerv.boot.entity; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.activerecord.Model; + +import java.io.Serializable; + +/** + *

+ * 实体扩展类 + *

+ * + * @author Gnerv LiGen + * @since 2019/9/4 + */ +public class BaseExtend extends Model implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 扩展字段 + */ + @TableField(exist = false) + private Object extend; + + public Object getExtend() { + return extend; + } + + public void setExtend(Object extend) { + this.extend = extend; + } + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/src/main/java/com/gnerv/boot/interceptor/EntityExtendInterceptor.java b/src/main/java/com/gnerv/boot/interceptor/EntityExtendInterceptor.java new file mode 100644 index 0000000..00b5d9f --- /dev/null +++ b/src/main/java/com/gnerv/boot/interceptor/EntityExtendInterceptor.java @@ -0,0 +1,64 @@ +package com.gnerv.boot.interceptor; + +import com.gnerv.boot.annotation.EntityExtend; +import com.gnerv.boot.common.EntityExtendBean; +import com.gnerv.boot.utils.mapper.MapperUtils; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.executor.resultset.ResultSetHandler; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ResultMap; +import org.apache.ibatis.mapping.ResultMapping; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.plugin.Intercepts; +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.plugin.Plugin; +import org.apache.ibatis.plugin.Signature; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.Properties; + +@Component +@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), + @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) +public class EntityExtendInterceptor implements Interceptor { + + + @Override + public Object intercept(Invocation invocation) throws Throwable { + Object[] args = invocation.getArgs(); + MappedStatement ms = (MappedStatement) args[0]; + EntityExtend entityExtend = checkEntityExtend(ms); + if(StringUtils.isEmpty(entityExtend)){ + return invocation.proceed(); + } + MappedStatement mappedStatement = MapperUtils.buildMappedStatement(ms, entityExtend); + args[0] = mappedStatement; + return invocation.proceed(); + } + + @Override + public Object plugin(Object target) { + return target instanceof ResultSetHandler ? Plugin.wrap(target, this) : target; + } + + @Override + public void setProperties(Properties properties) { + + } + + public EntityExtend checkEntityExtend(MappedStatement ms){ + EntityExtend entityExtend = null; + List resultMaps = ms.getResultMaps(); + for (ResultMap resultMap : resultMaps) { + Class type = resultMap.getType(); + entityExtend = EntityExtendBean.BEANS_MAP.get(type); + } + return entityExtend; + } + +} diff --git a/src/main/java/com/gnerv/boot/listener/ContextRefreshedListener.java b/src/main/java/com/gnerv/boot/listener/ContextRefreshedListener.java new file mode 100644 index 0000000..903b4d5 --- /dev/null +++ b/src/main/java/com/gnerv/boot/listener/ContextRefreshedListener.java @@ -0,0 +1,40 @@ +package com.gnerv.boot.listener; + +import com.gnerv.boot.annotation.EntityExtend; +import com.gnerv.boot.common.EntityExtendBean; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * spring 容器内容 监听器 + *

+ * + * @author Gnerv LiGen + * @since 2019/8/30 + */ +@Component +public class ContextRefreshedListener implements ApplicationListener { + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + saveEntityExtendBean(contextRefreshedEvent); + } + + public void saveEntityExtendBean(ContextRefreshedEvent contextRefreshedEvent) { + Map map = new HashMap<>(); + Map beans = contextRefreshedEvent.getApplicationContext().getBeansWithAnnotation(EntityExtend.class); + for (Object o : beans.values()) { + Class clazz = o.getClass(); + EntityExtend entityExtend = clazz.getAnnotation(EntityExtend.class); + map.put(clazz, entityExtend); + } + EntityExtendBean.BEANS_MAP = map; + } + + +} diff --git a/src/main/java/com/gnerv/boot/utils/ExcelUtil.java b/src/main/java/com/gnerv/boot/utils/excel/ExcelUtils.java similarity index 94% rename from src/main/java/com/gnerv/boot/utils/ExcelUtil.java rename to src/main/java/com/gnerv/boot/utils/excel/ExcelUtils.java index 9c8b0f0..c37b434 100644 --- a/src/main/java/com/gnerv/boot/utils/ExcelUtil.java +++ b/src/main/java/com/gnerv/boot/utils/excel/ExcelUtils.java @@ -1,4 +1,4 @@ -package com.gnerv.boot.utils; +package com.gnerv.boot.utils.excel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; @@ -15,29 +15,18 @@ import java.util.ArrayList; import java.util.List; -/** - * @author Gnerv LiGen - * @description Excel工具 - * @data 2019/6/13 - */ -public class ExcelUtil { +public class ExcelUtils { private final static String xls = "xls"; private final static String xlsx = "xlsx"; - /** - * 读入excel文件,解析后返回 - * - * @param file - * @throws IOException - */ public static List readExcel(MultipartFile file) throws IOException { //检查文件 checkFile(file); //获得Workbook工作薄对象 Workbook workbook = getWorkBook(file); //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回 - List list = new ArrayList<>(); + List list = new ArrayList(); if (workbook != null) { for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { //获得当前sheet工作表 diff --git a/src/main/java/com/gnerv/boot/utils/log/LogUtils.java b/src/main/java/com/gnerv/boot/utils/log/LogUtils.java new file mode 100644 index 0000000..c79aee8 --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/log/LogUtils.java @@ -0,0 +1,143 @@ +package com.gnerv.boot.utils.log; + +import com.alibaba.fastjson.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + *

+ * 日志工具类 + *

+ * + * @author Gnerv LiGen + * @since 2019/5/31 + */ +public class LogUtils { + + private static Logger logger = LoggerFactory.getLogger(LogUtils.class); + + public static void info(String msg, Object... tag) { + StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; + String logInfo = getLogInfo(stackTraceElement, msg); + logger.info(logInfo, tag); + } + + public static void error(String msg, Object... tag) { + StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; + String logInfo = getLogInfo(stackTraceElement, msg); + logger.error(logInfo, tag); + } + + public static void debug(String msg, Object... tag) { + StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; + String logInfo = getLogInfo(stackTraceElement, msg); + logger.debug(logInfo, tag); + } + + public static void trace(String msg, Object... tag) { + StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; + String logInfo = getLogInfo(stackTraceElement, msg); + logger.trace(logInfo, tag); + } + + private static String getLogInfo(StackTraceElement stackTraceElement, String msg) { + // 获取线程名 + String threadName = Thread.currentThread().getName(); + // 获取线程ID + long threadId = Thread.currentThread().getId(); + // 获取文件名.即xxx.java + String fileName = stackTraceElement.getFileName(); + // 获取类名.即包名+类名 + String className = stackTraceElement.getClassName(); + // 获取方法名称 + String methodName = stackTraceElement.getMethodName(); + // 获取行号 + int lineNumber = stackTraceElement.getLineNumber(); + LogInfo logInfo = new LogInfo(threadName, threadId, fileName, className, methodName, lineNumber, msg); + return logInfo.toString(); + } + + public static class LogInfo { + private String threadName; + private long threadId; + private String fileName; + private String className; + private String methodName; + private int lineNumber; + private String msg; + + public LogInfo() { + } + + public LogInfo(String threadName, long threadId, String fileName, String className, String methodName, int lineNumber, String msg) { + this.threadName = threadName; + this.threadId = threadId; + this.fileName = fileName; + this.className = className; + this.methodName = methodName; + this.lineNumber = lineNumber; + this.msg = msg; + } + + public String getThreadName() { + return threadName; + } + + public void setThreadName(String threadName) { + this.threadName = threadName; + } + + public long getThreadId() { + return threadId; + } + + public void setThreadId(long threadId) { + this.threadId = threadId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getMethodName() { + return methodName; + } + + public void setMethodName(String methodName) { + this.methodName = methodName; + } + + public int getLineNumber() { + return lineNumber; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + @Override + public String toString() { + return JSON.toJSONString(this); + } + } +} diff --git a/src/main/java/com/gnerv/boot/utils/mapper/MapperUtils.java b/src/main/java/com/gnerv/boot/utils/mapper/MapperUtils.java new file mode 100644 index 0000000..b0f81ea --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/mapper/MapperUtils.java @@ -0,0 +1,82 @@ +package com.gnerv.boot.utils.mapper; + +import com.gnerv.boot.annotation.EntityExtend; +import com.gnerv.boot.common.EntityExtendBean; +import com.gnerv.boot.utils.reflect.ReflectUtils; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ResultMap; +import org.apache.ibatis.mapping.ResultMapping; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * Mapper工具类 + *

+ * + * @author Gnerv LiGen + * @since 2019/5/31 + */ +public class MapperUtils { + + public static String EXTEND = "extend"; + + + public static MappedStatement buildMappedStatement(MappedStatement ms, EntityExtend entityExtend) { + MappedStatement.Builder builder = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), ms.getSqlSource(), ms.getSqlCommandType()); + builder.resource(ms.getResource()); + builder.fetchSize(ms.getFetchSize()); + builder.statementType(ms.getStatementType()); + builder.keyGenerator(ms.getKeyGenerator()); + builder.timeout(ms.getTimeout()); + builder.parameterMap(ms.getParameterMap()); + + builder.resultMaps(buildResultMap(ms, entityExtend)); + + builder.resultSetType(ms.getResultSetType()); + builder.cache(ms.getCache()); + builder.flushCacheRequired(ms.isFlushCacheRequired()); + builder.useCache(ms.isUseCache()); + return builder.build(); + } + + public static List buildResultMap(MappedStatement ms, EntityExtend entityExtend) { + List resultMaps = ms.getResultMaps(); + ResultMap build = null; + for (ResultMap resultMap : resultMaps) { + List composites = buildComposites(ms, resultMap, entityExtend); + List resultMappings = buildResultMappings(ms, resultMap, composites, entityExtend); + build = new ResultMap.Builder(ms.getConfiguration(), resultMap.getId(), resultMap.getType(), resultMappings).build(); + } + List lists = new ArrayList(resultMaps); + lists.add(build); + return resultMaps; + } + + public static List buildResultMappings(MappedStatement ms, ResultMap resultMap, List composites, EntityExtend entityExtend) { + List resultMappings = resultMap.getResultMappings(); + String id = resultMap.getId(); + ResultMapping resultMapping = + new ResultMapping.Builder(ms.getConfiguration(), EXTEND, entityExtend.parameter() + "=" + entityExtend.mColumn(), List.class) + .nestedQueryId(entityExtend.select()) + .composites(composites) + .build(); + List lists = new ArrayList(resultMappings); + lists.add(resultMapping); + return lists; + } + + public static List buildComposites(MappedStatement ms, ResultMap resultMap, EntityExtend entityExtend) { + List resultMappings = resultMap.getResultMappings(); + String id = resultMap.getId(); + ResultMapping resultMapping = + new ResultMapping.Builder(ms.getConfiguration(), entityExtend.parameter(), entityExtend.mColumn(), Object.class) + .nestedQueryId("") + .build(); + List lists = new ArrayList(resultMappings); + lists.add(resultMapping); + return lists; + } + +} diff --git a/src/main/java/com/gnerv/boot/utils/qrcode/QrCodeUtils.java b/src/main/java/com/gnerv/boot/utils/qrcode/QrCodeUtils.java new file mode 100644 index 0000000..ffa2b41 --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/qrcode/QrCodeUtils.java @@ -0,0 +1,13 @@ +package com.gnerv.boot.utils.qrcode; + +/** + *

+ * 二维码工具 + *

+ * + * @author Gnerv LiGen + * @since 2019/5/31 + */ +public class QrCodeUtils { + +} diff --git a/src/main/java/com/gnerv/boot/utils/reflect/ReflectUtils.java b/src/main/java/com/gnerv/boot/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..46f104d --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/reflect/ReflectUtils.java @@ -0,0 +1,186 @@ +package com.gnerv.boot.utils.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + *

+ * 反射工具 + *

+ * + * @author Gnerv LiGen + * @since 2019/8/13 + */ +public class ReflectUtils { + + public static Object getObject(Class clazz) { + Object o = null; + try { + o = clazz.newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return o; + } + + public static Class getClazz(String classPath) { + Class c = null; + try { + c = Class.forName(classPath); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return c; + } + + public static Class getClazz(String packagePath, String className) { + String classPath = packagePath + "." + className; + Class c = null; + try { + c = Class.forName(classPath); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return c; + } + + public static Object setAttributeValue(Object o, String fieldName, Object value){ + try { + Field declaredField = o.getClass().getDeclaredField(fieldName); + declaredField.setAccessible(true); + declaredField.set(o, value); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return o; + } + + public static Object getAttributeValue(Object o, String fieldName){ + Field declaredField = getDeclaredField(o, fieldName); + declaredField.setAccessible(true); + Object value = null; + try { + value = declaredField.get(o); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return value; + } + + public static Field getField(Object o, String fieldName){ + Field field = null; + try { + field = o.getClass().getField(fieldName); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + return field; + } + + public static Field[] getFields(Object o){ + Field[] fields = o.getClass().getFields(); + return fields; + } + + public static Field getDeclaredField(Object o, String fieldName){ + Field declaredField = null; + try { + declaredField = o.getClass().getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + return declaredField; + } + + public static Field[] getDeclaredFields(Object o, String fieldName){ + Field[] declaredFields = o.getClass().getDeclaredFields(); + return declaredFields; + } + + public static Method getMethod(Class c, String methodName, Class[] args) { + Method method = null; + try { + method = c.getMethod(methodName, args); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + return method; + } + + public static Method getMethod(Class c, String methodName, Object[] args) { + Class[] clazz = new Class[args.length]; + for (int i = 0; i < args.length; i++) { + clazz[i] = args[i].getClass(); + } + Method method = null; + try { + method = c.getMethod(methodName, clazz); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + return method; + } + + public static Method getMethod(String classPath, String methodName, Class[] args) { + Class c = getClazz(classPath); + Method method = null; + try { + method = c.getMethod(methodName, args); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + return method; + } + + public static Method getDeclaredMethod(Class c, String methodName, Class[] args) { + Method method = null; + try { + method = c.getDeclaredMethod(methodName, args); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + return method; + } + + public static Method getDeclaredMethod(String classPath, String methodName, Class[] args) { + Class c = getClazz(classPath); + Method method = null; + try { + method = c.getDeclaredMethod(methodName, args); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + return method; + } + + public static Object runMethod(Class c, String methodName, Object[] args){ + Method method = getMethod(c, methodName, args); + Object invoke = null; + try { + invoke = method.invoke(c, args); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return invoke; + } + + public static Object runMethod(Class c, Method method, Object[] args){ + Object invoke = null; + try { + invoke = method.invoke(c, args); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return invoke; + } + +} diff --git a/src/main/java/com/gnerv/boot/utils/test/TestMain.java b/src/main/java/com/gnerv/boot/utils/test/TestMain.java new file mode 100644 index 0000000..c1efb8d --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/test/TestMain.java @@ -0,0 +1,10 @@ +package com.gnerv.boot.utils.test; + +public class TestMain { + + + public static void main(String[] args) { + } + + +} diff --git a/src/main/java/com/gnerv/boot/utils/uuid/UUIDUtils.java b/src/main/java/com/gnerv/boot/utils/uuid/UUIDUtils.java new file mode 100644 index 0000000..bd529f2 --- /dev/null +++ b/src/main/java/com/gnerv/boot/utils/uuid/UUIDUtils.java @@ -0,0 +1,33 @@ +package com.gnerv.boot.utils.uuid; + +import java.util.UUID; + +/** + *

+ * UUID工具类 + *

+ * + * @author Gnerv LiGen + * @since 2019/5/31 + */ +public class UUIDUtils { + + /** + * 去中横线 小写 + * + * @return uuid + */ + public static String getLower() { + return UUID.randomUUID().toString().replace("-", "").toLowerCase(); + } + + /** + * 去中横线 大写 + * + * @return uuid + */ + public static String getUpper() { + return UUID.randomUUID().toString().replace("-", "").toUpperCase(); + } + +}