From d1cac9240e091c63933d7d1e07d85c1f06209a0d Mon Sep 17 00:00:00 2001 From: qi_liang Date: Fri, 22 Mar 2019 17:15:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=EF=BC=8C=E4=BB=A3=E7=A0=81=E5=8A=9F=E8=83=BD=E6=97=A0?= =?UTF-8?q?=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- panda-all/panda-all.iml | 8 +- panda-all/pom.xml | 2 +- panda-aop/panda-aop.iml | 7 + .../panda/aop/proxy/CGLibDynamicPorxy.java | 4 + .../aop/util/InterfaceProxyFactoryUtil.java | 4 + panda-beans/panda-beans.iml | 7 + .../org/panda/beans/adapter/BeanAdapter.java | 11 ++ .../org/panda/beans/factory/BeanFactory.java | 96 ++++++++++ .../java/org/panda/beans/util/BeanUtil.java | 25 +-- .../java/org/panda/beans/util/ClassUtil.java | 1 + .../java/org/panda/beans/entity/SysUser.java | 51 +++++ .../org/panda/beans/util/BeanUtilTest.java | 33 ++++ panda-code/panda-code.iml | 7 + panda-code/pom.xml | 21 +++ .../java/org/panda/code/uitl/ArrayUtil.java | 7 +- .../java/org/panda/code/uitl/CodecUtil.java | 1 + .../org/panda/code/uitl/CollectionUtil.java | 1 + .../java/org/panda/code/uitl/DateUtil.java | 14 +- .../java/org/panda/code/uitl/HttpUtil.java | 1 + .../java/org/panda/code/uitl/JvmUtil.java | 1 + .../java/org/panda/code/uitl/Md5Util.java | 1 + .../org/panda/code/uitl/ReflectionUtil.java | 4 +- .../java/org/panda/code/uitl/StreamUtil.java | 33 +++- .../java/org/panda/code/uitl/StringUtil.java | 9 +- .../org/panda/code/uitl/file/FileUtil.java | 45 ++++- .../org/panda/code/uitl/http/HttpsClient.java | 175 ++++++++++++++++++ .../java/org/panda/code/uitl/os/JvmUtil.java | 107 +++++++++++ .../java/org/panda/code/uitl/os/NetUtil.java | 4 +- .../java/org/panda/code/uitl/os/OsUtil.java | 52 ++++++ .../org/panda/code/uitl/os/mode/JvmInfo.java | 38 ++++ .../org/panda/code/uitl/os/mode/OsInfo.java | 39 ++++ panda-jdbc/panda-jdbc.iml | 6 + .../main/java/org/panda/jdbc/BeanHander.java | 1 + .../java/org/panda/jdbc/BeanListHandler.java | 1 + .../java/org/panda/jdbc/ResultSetHandler.java | 1 - .../main/java/org/panda/jdbc/mode/DbInfo.java | 1 + .../main/java/org/panda/jdbc/mode/Table.java | 1 + .../org/panda/jdbc/sql/AbstractDbBuiler.java | 5 +- .../java/org/panda/jdbc/sql/BeanSqlUtil.java | 1 + .../test/java/org/panda/entity/SysUser.java | 11 ++ .../org/panda/jdbc/sql/MysqlBuilderTest.java | 43 +++++ pom.xml | 7 + 42 files changed, 859 insertions(+), 28 deletions(-) create mode 100644 panda-beans/src/main/java/org/panda/beans/adapter/BeanAdapter.java create mode 100644 panda-beans/src/main/java/org/panda/beans/factory/BeanFactory.java create mode 100644 panda-beans/src/test/java/org/panda/beans/entity/SysUser.java create mode 100644 panda-beans/src/test/java/org/panda/beans/util/BeanUtilTest.java create mode 100644 panda-code/src/main/java/org/panda/code/uitl/http/HttpsClient.java create mode 100644 panda-code/src/main/java/org/panda/code/uitl/os/JvmUtil.java create mode 100644 panda-code/src/main/java/org/panda/code/uitl/os/OsUtil.java create mode 100644 panda-code/src/main/java/org/panda/code/uitl/os/mode/JvmInfo.java create mode 100644 panda-code/src/main/java/org/panda/code/uitl/os/mode/OsInfo.java diff --git a/panda-all/panda-all.iml b/panda-all/panda-all.iml index 2a65123..606c170 100644 --- a/panda-all/panda-all.iml +++ b/panda-all/panda-all.iml @@ -18,11 +18,16 @@ + + + + + + - @@ -39,5 +44,6 @@ + \ No newline at end of file diff --git a/panda-all/pom.xml b/panda-all/pom.xml index 2834d1d..ad1c1b2 100644 --- a/panda-all/pom.xml +++ b/panda-all/pom.xml @@ -7,7 +7,7 @@ org.panda 1.0-SNAPSHOT - pom + jar 4.0.0 ${project.version} panda-all diff --git a/panda-aop/panda-aop.iml b/panda-aop/panda-aop.iml index 177fb70..73638cc 100644 --- a/panda-aop/panda-aop.iml +++ b/panda-aop/panda-aop.iml @@ -23,11 +23,18 @@ + + + + + + + \ No newline at end of file diff --git a/panda-aop/src/main/java/org/panda/aop/proxy/CGLibDynamicPorxy.java b/panda-aop/src/main/java/org/panda/aop/proxy/CGLibDynamicPorxy.java index b616172..3cb11da 100644 --- a/panda-aop/src/main/java/org/panda/aop/proxy/CGLibDynamicPorxy.java +++ b/panda-aop/src/main/java/org/panda/aop/proxy/CGLibDynamicPorxy.java @@ -3,11 +3,15 @@ package org.panda.aop.proxy; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.Method; public class CGLibDynamicPorxy implements MethodInterceptor { + private static final Logger LOGGER= LoggerFactory.getLogger(CGLibDynamicPorxy.class); + private static CGLibDynamicPorxy instance = new CGLibDynamicPorxy(); private CGLibDynamicPorxy(){ diff --git a/panda-aop/src/main/java/org/panda/aop/util/InterfaceProxyFactoryUtil.java b/panda-aop/src/main/java/org/panda/aop/util/InterfaceProxyFactoryUtil.java index 856e417..8db2868 100644 --- a/panda-aop/src/main/java/org/panda/aop/util/InterfaceProxyFactoryUtil.java +++ b/panda-aop/src/main/java/org/panda/aop/util/InterfaceProxyFactoryUtil.java @@ -1,6 +1,9 @@ package org.panda.aop.util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; @@ -11,6 +14,7 @@ import java.lang.reflect.Proxy; */ public class InterfaceProxyFactoryUtil implements InvocationHandler { + private static final Logger logger = LoggerFactory.getLogger(InterfaceProxyFactoryUtil.class); /** * * @param mammperInterface diff --git a/panda-beans/panda-beans.iml b/panda-beans/panda-beans.iml index f08ac05..cbe3627 100644 --- a/panda-beans/panda-beans.iml +++ b/panda-beans/panda-beans.iml @@ -18,11 +18,18 @@ + + + + + + + \ No newline at end of file diff --git a/panda-beans/src/main/java/org/panda/beans/adapter/BeanAdapter.java b/panda-beans/src/main/java/org/panda/beans/adapter/BeanAdapter.java new file mode 100644 index 0000000..cb0ac94 --- /dev/null +++ b/panda-beans/src/main/java/org/panda/beans/adapter/BeanAdapter.java @@ -0,0 +1,11 @@ +package org.panda.beans.adapter; + +/** + * @Author: qi + * @Description: + * @Date: Create in 9:29 AM 2019/2/23 + */ +public interface BeanAdapter { + + +} diff --git a/panda-beans/src/main/java/org/panda/beans/factory/BeanFactory.java b/panda-beans/src/main/java/org/panda/beans/factory/BeanFactory.java new file mode 100644 index 0000000..d2f87f5 --- /dev/null +++ b/panda-beans/src/main/java/org/panda/beans/factory/BeanFactory.java @@ -0,0 +1,96 @@ +package org.panda.beans.factory; + +/** + * @Author: qi + * @Description: + * @Date: Create in 9:06 AM 2019/1/29 + * 实例工厂 + */ +public interface BeanFactory { + + /** + * 实例 -> 工厂转义符 + */ + String FACTORY_BEAN_PREFIX = "&"; + + /** + * 通过类名查找实例 + * @param name + * @return + */ + Object getBean(String name); + + /** + * 通过类名查找实例并确定类型 + * @param name + * @param requiredType + * @param + * @return + */ + T getBean(String name,Class requiredType); + + /** + * 通过类名查找实例 + * @param name + * @param args + * @return + */ + Object getBean(String name,Object... args); + + /** + * 通过class查找实例 + * @param requiredType + * @param + * @return + */ + T getBean(Class requiredType); + + + /** + * 通过实例名,返回实例class + * @param name + * @return + */ + Class getType(String name); + + /** + * 通过实例名返回该实例的别名数组 + * @param name + * @return + */ + String[] getAliases(String name); + + /** + * 通过实例名判断实例是否存在 + * @param name + * @return 存在:true 不存在:false + */ + boolean containsBean(String name); + + /** + * singletion和protpType区别 + * 1.singletion在容器中只有一个实例,protoType则是每次getBean的时候创建一个实例 + */ + + /** + * 通过实例名判断实例是否是单例 + * @param name + * @return 是:true 否:false + */ + boolean isSingletion(String name); + + /** + * 通过实例名判断实例是否原型 + * @param name + * @return 是:true 否:false + */ + boolean isProtoType(String name); + + /** + * 检查实例是否与class类型是否匹配 + * @param name + * @param typeToMatch + * @return 是:true 否:false + */ + boolean isTypeMatch(String name,Class typeToMatch); +} diff --git a/panda-beans/src/main/java/org/panda/beans/util/BeanUtil.java b/panda-beans/src/main/java/org/panda/beans/util/BeanUtil.java index e400ea8..474b19c 100644 --- a/panda-beans/src/main/java/org/panda/beans/util/BeanUtil.java +++ b/panda-beans/src/main/java/org/panda/beans/util/BeanUtil.java @@ -66,12 +66,12 @@ public class BeanUtil { public static void copyNotNull(Object targer,Object source){ Class sourceClass = source.getClass(); - List fieldList = getAllField(sourceClass); - Map fieldMap = new HashMap<>(fieldList.size()); - for (Field field: fieldList){ + List sourcefieldList = getAllField(sourceClass); + Map fieldMap = new HashMap<>(sourcefieldList.size()); + sourcefieldList.forEach(field -> { field.setAccessible(true); fieldMap.put(field.getName(),field); - } + }); Class targerClass = targer.getClass(); List targerFieldList = getAllField(targerClass); for (Field field:targerFieldList){ @@ -82,10 +82,10 @@ public class BeanUtil { try { PropertyDescriptor pd = new PropertyDescriptor(targerField.getName(), targerClass); //获得写方法 - Method wM = pd.getWriteMethod(); + Method setFieldMethod = pd.getWriteMethod(); Object value = targerField.get(source); if (value!=null) { - wM.invoke(targer, value); + setFieldMethod.invoke(targer, value); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -157,7 +157,11 @@ public class BeanUtil { } - + /** + * 获取实体名称 + * @param entityClazz + * @return + */ public static String getEntityName(Class entityClazz){ String entityPath=entityClazz.getName(); String [] entityNameArray=entityPath.split("\\."); @@ -172,13 +176,12 @@ public class BeanUtil { * @return */ public static Boolean isType(Object obj,Class clazzType){ + boolean isType = false; if (obj!=null) { Class clazz = obj.getClass(); - return clazz.getTypeName().equals(clazzType.getTypeName()) ? true : false; - } - else{ - return false; + isType = clazz.getTypeName().equals(clazzType.getTypeName()) ? true : false; } + return isType; } /** diff --git a/panda-beans/src/main/java/org/panda/beans/util/ClassUtil.java b/panda-beans/src/main/java/org/panda/beans/util/ClassUtil.java index 4da11c4..e2e13fc 100644 --- a/panda-beans/src/main/java/org/panda/beans/util/ClassUtil.java +++ b/panda-beans/src/main/java/org/panda/beans/util/ClassUtil.java @@ -14,6 +14,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; /** + * @author qi * 类加载器 */ public class ClassUtil { diff --git a/panda-beans/src/test/java/org/panda/beans/entity/SysUser.java b/panda-beans/src/test/java/org/panda/beans/entity/SysUser.java new file mode 100644 index 0000000..e86b4e5 --- /dev/null +++ b/panda-beans/src/test/java/org/panda/beans/entity/SysUser.java @@ -0,0 +1,51 @@ +package org.panda.beans.entity; + +import java.util.Date; + +/** + * @Author: qi + * @Description: + * @Date: Create in 10:25 AM 2019/2/28 + */ +public class SysUser { + + private Long id; + + private String name; + + private Date createTime; + + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/panda-beans/src/test/java/org/panda/beans/util/BeanUtilTest.java b/panda-beans/src/test/java/org/panda/beans/util/BeanUtilTest.java new file mode 100644 index 0000000..b7da34c --- /dev/null +++ b/panda-beans/src/test/java/org/panda/beans/util/BeanUtilTest.java @@ -0,0 +1,33 @@ +package org.panda.beans.util; + +import org.junit.Test; +import org.panda.beans.entity.SysUser; + +import java.lang.reflect.Method; +import java.util.Date; + +import static org.junit.Assert.*; + +/** + * @Author: qi + * @Description: + * @Date: Create in 10:25 AM 2019/2/28 + */ +public class BeanUtilTest { + + @Test + public void methodTest(){ + SysUser sysUser = new SysUser(); + sysUser.setId(1L); + sysUser.setName("liangqi"); + sysUser.setCreateTime(new Date()); + sysUser.setUpdateTime(new Date()); + + Class clazz = sysUser.getClass(); + Method[] methods = clazz.getMethods(); + for (Method method:methods){ + System.out.println(method.getName()); + } + } + +} \ No newline at end of file diff --git a/panda-code/panda-code.iml b/panda-code/panda-code.iml index 819f419..9a14395 100644 --- a/panda-code/panda-code.iml +++ b/panda-code/panda-code.iml @@ -17,11 +17,18 @@ + + + + + + + \ No newline at end of file diff --git a/panda-code/pom.xml b/panda-code/pom.xml index 747dbb1..a2188a4 100644 --- a/panda-code/pom.xml +++ b/panda-code/pom.xml @@ -27,6 +27,7 @@ 2.9.6 + 4.5.2 @@ -72,6 +73,26 @@ 1.3.2 + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + + org.apache.httpcomponents + httpmime + ${httpclient.version} + + + + + com.alibaba + fastjson + 1.2.40 + + diff --git a/panda-code/src/main/java/org/panda/code/uitl/ArrayUtil.java b/panda-code/src/main/java/org/panda/code/uitl/ArrayUtil.java index 70d1a40..046dcd0 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/ArrayUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/ArrayUtil.java @@ -3,6 +3,7 @@ package org.panda.code.uitl; import org.apache.commons.lang3.ArrayUtils; /** + * @author qi * 数组工具类 */ public class ArrayUtil { @@ -12,9 +13,9 @@ public class ArrayUtil { * @param array * @return */ - public static boolean isNotEmpty(Object[] array){ + public static boolean isNotEmpty(T[] array){ - return ArrayUtils.isNotEmpty(array); + return array!=null&&array.length>0; } /** @@ -24,7 +25,7 @@ public class ArrayUtil { */ public static boolean isEmpty(Object[] array){ - return ArrayUtils.isEmpty(array); + return array==null||array.length==0; } } diff --git a/panda-code/src/main/java/org/panda/code/uitl/CodecUtil.java b/panda-code/src/main/java/org/panda/code/uitl/CodecUtil.java index 7b9f474..c36c060 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/CodecUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/CodecUtil.java @@ -9,6 +9,7 @@ import java.net.URLEncoder; /** + * @author qi * 编码与解码操作工具类 */ public final class CodecUtil { diff --git a/panda-code/src/main/java/org/panda/code/uitl/CollectionUtil.java b/panda-code/src/main/java/org/panda/code/uitl/CollectionUtil.java index 68ff9fc..7ff7d1e 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/CollectionUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/CollectionUtil.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.Map; /** + * @author qi * 集合工具类 */ public class CollectionUtil { diff --git a/panda-code/src/main/java/org/panda/code/uitl/DateUtil.java b/panda-code/src/main/java/org/panda/code/uitl/DateUtil.java index 500f46b..f39ed7f 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/DateUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/DateUtil.java @@ -50,7 +50,13 @@ public class DateUtil { return str; } - + /** + * 通过日期字符串返回时间 + * @param strDate + * @param pattern + * @return + * @throws ParseException + */ public static Date strToDate(String strDate,String pattern) throws ParseException { if (StringUtil.isNull(pattern)){ pattern = DEFAULT_PATTERN; @@ -61,6 +67,12 @@ public class DateUtil { return sdf.parse(strDate); } + /** + * + * @param startDate + * @param endDate + * @return + */ public static int disparityDay(Date startDate,Date endDate){ int day = (int)(endDate.getTime()-startDate.getTime())/(24*60*60*1000); return day; diff --git a/panda-code/src/main/java/org/panda/code/uitl/HttpUtil.java b/panda-code/src/main/java/org/panda/code/uitl/HttpUtil.java index ea4b46b..d992d7b 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/HttpUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/HttpUtil.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; /** + * @author qi * Created by qi on 2017/8/9. */ public class HttpUtil { diff --git a/panda-code/src/main/java/org/panda/code/uitl/JvmUtil.java b/panda-code/src/main/java/org/panda/code/uitl/JvmUtil.java index 594245e..319dcda 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/JvmUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/JvmUtil.java @@ -7,6 +7,7 @@ import java.text.NumberFormat; import java.util.Locale; /** + * @author qi * Created by qi_liang on 2018/5/25. */ public class JvmUtil { diff --git a/panda-code/src/main/java/org/panda/code/uitl/Md5Util.java b/panda-code/src/main/java/org/panda/code/uitl/Md5Util.java index d1f150a..dd4e144 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/Md5Util.java +++ b/panda-code/src/main/java/org/panda/code/uitl/Md5Util.java @@ -3,6 +3,7 @@ package org.panda.code.uitl; import java.security.MessageDigest; /** + * @author qi * Created by qi on 2017/8/12. */ public class Md5Util { diff --git a/panda-code/src/main/java/org/panda/code/uitl/ReflectionUtil.java b/panda-code/src/main/java/org/panda/code/uitl/ReflectionUtil.java index b92de86..5b5c2d0 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/ReflectionUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/ReflectionUtil.java @@ -8,13 +8,14 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** + * @author qi * 反射工具 * newInstance: 弱类型。低效率。只能调用无参构造。 new: 强类型。相对高效。能调用任何public构造。 */ public class ReflectionUtil { - private static final Logger logger = LoggerFactory.getLogger(ReflectionUtil.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ReflectionUtil.class); /** * 创建实例 @@ -23,7 +24,6 @@ public class ReflectionUtil { */ public static Object newInstance(Class clazz){ Object instance = null ; - try { instance = clazz.newInstance(); } catch (InstantiationException e) { diff --git a/panda-code/src/main/java/org/panda/code/uitl/StreamUtil.java b/panda-code/src/main/java/org/panda/code/uitl/StreamUtil.java index 42887a5..f2bf8e4 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/StreamUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/StreamUtil.java @@ -13,6 +13,16 @@ public class StreamUtil { private static final Logger LOGGER = LoggerFactory.getLogger(StreamUtil.class); + /** + * 默认缓存块大小 + */ + public static final int BUFFER_SIZE = 4096; + + /** + * 输入流转换字符串 + * @param is + * @return + */ public static String getString(InputStream is){ StringBuilder sb = new StringBuilder(); try { @@ -23,14 +33,14 @@ public class StreamUtil { } }catch (IOException e){ LOGGER.error("get string failure",e); - e.printStackTrace(); + throw new RuntimeException(e); } return sb.toString(); } /** - * 将输入流负责到输出流 + * 输入流复制到输出流 */ public static void copyStream(InputStream inputStream, OutputStream outputStream){ try { @@ -49,7 +59,26 @@ public class StreamUtil { outputStream.close(); } catch (IOException e) { LOGGER.error("close stream failure",e); + throw new RuntimeException(e); } } } + + /** + * 缓存块写入输出流中 + * @param in + * @param out + * @throws IOException + */ + public static void copy(byte[] in,OutputStream out) throws IOException { + if (in==null||in.length==0){ + LOGGER.error("in is null"); + } + if (out==null){ + LOGGER.error("out is null"); + } + out.write(in); + } + + } diff --git a/panda-code/src/main/java/org/panda/code/uitl/StringUtil.java b/panda-code/src/main/java/org/panda/code/uitl/StringUtil.java index d4c2948..a200741 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/StringUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/StringUtil.java @@ -5,6 +5,7 @@ import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** + * @author qi * Created by qi on 2017/8/13. */ public class StringUtil { @@ -109,6 +110,12 @@ public class StringUtil { return randomChar((int)'A',26); } + /** + * 字符串切割 + * @param str + * @param sign + * @return + */ public static String[] splistString(String str,String sign){ return str.split(sign); @@ -125,8 +132,6 @@ public class StringUtil { } public String randomString(int length,String needRule){ - -// Random random=new Random(); //jdk 1.7 以后用来取代Random,性能会有提升 ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current(); threadLocalRandom.nextInt(100); diff --git a/panda-code/src/main/java/org/panda/code/uitl/file/FileUtil.java b/panda-code/src/main/java/org/panda/code/uitl/file/FileUtil.java index b10b92f..e1e634c 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/file/FileUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/file/FileUtil.java @@ -8,9 +8,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; +import java.util.List; /** - * Created by qi on 2018-1-20. + * @author qi + * */ public class FileUtil { @@ -133,5 +135,46 @@ public class FileUtil { return fileType; } + /** + * 获取一个文件夹下的文件目录 + * @param dirPath + * @return + */ + public static void getFileList(String dirPath){ + + File file = new File(dirPath); + if (!file.exists()){ + String msg = "file not exists,please check file !" ; + LOGGER.error(msg,new RuntimeException(msg)); + } + if (!file.isDirectory()){ + String msg = "file is not directory, please check file !"; + LOGGER.error(msg,new RuntimeException(msg)); + } + File[] files = file.listFiles(); + for (File file1:files){ + if (file1.isDirectory()){ + System.out.println(file.getName()); + getFileList(file1.getPath()); + continue; + } + System.out.println(file1.getName()); + } + } + /** + * 获取一个文件夹下的隐藏文件列表 + * @param dirPath + * @return + */ + public static List findAllHiddenFile(String dirPath){ + File dirFile = new File(dirPath); + + return null; + } + + public static void main(String[] args) { + + getFileList("/Users/qi/java"); + } } diff --git a/panda-code/src/main/java/org/panda/code/uitl/http/HttpsClient.java b/panda-code/src/main/java/org/panda/code/uitl/http/HttpsClient.java new file mode 100644 index 0000000..6280d50 --- /dev/null +++ b/panda-code/src/main/java/org/panda/code/uitl/http/HttpsClient.java @@ -0,0 +1,175 @@ +package org.panda.code.uitl.http; + +import com.alibaba.fastjson.JSONObject; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import java.io.*; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class HttpsClient { + + private static final Logger LOGGER = LoggerFactory.getLogger(HttpsClient.class); + + /** + * http 默认字符编码 + */ + public static final String DETAFILE_CHARSET = "UTF-8"; + + public static String post(String url,Map params) throws IOException{ + String boundary = getBoundaryStr(); + CloseableHttpResponse reponse =null; + CloseableHttpClient client = null; + String resultStr = ""; + try{ + // 获得utf-8编码的mbuilder + MultipartEntityBuilder mBuilder = get_COMPATIBLE_Builder(DETAFILE_CHARSET,boundary); + /** + * 原生的微信使用的url是https://api.weixin.qq.com/cgi-bin/media/upload? + * access_token=##ACCESS_TOKEN##&type=##TYPE## + * 一般都会使用这个把参数直接携带在url中。我个人不喜欢这样,因为既然使用了httpclient,完全可以把参数 + * 设置在我们的body体中。所以我们使用的url是这样的 + * https://api.weixin.qq.com/cgi-bin/media/upload 然后通过在body体中设置参数来设置 + * access_token和type这两个字段 + * + * */ + params.forEach((key,value)->{ + if (value instanceof String){ + mBuilder.addTextBody(key, (String) value); + } + if (value instanceof File){ + File file = (File)value; + mBuilder.addBinaryBody(key,file, + ContentType.APPLICATION_OCTET_STREAM,file + .getName()); + } + }); + + // 建造我们的http多媒体对象 + HttpEntity he = mBuilder.build(); + // 建立一个sslcontext,这里我们信任任何的证书。 + SSLContext context = getTrustAllSSLContext(); + // 建立socket工厂 + SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory( + context); + // 建立连接器 + client = HttpClients.custom() + .setSSLSocketFactory(factory).build(); + // 得到一个post请求的实体 + HttpPost post = getMultipartPost(url, boundary); + // 给请求添加参数 + post.setEntity(he); + // 执行请求并获得结果 + reponse = client.execute(post); + // 获得返回的内容 + HttpEntity entity = reponse.getEntity(); + // 输出 + System.out.println(JSONObject.toJSONString(entity)); + + resultStr = JSONObject.toJSONString(entity); + + Reader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + String line = null; + StringBuffer buffer = new StringBuffer(); + while (reader.ready()){ + buffer.append((char)reader.read()); + } + System.out.println(buffer.toString()); + } catch (ClientProtocolException e) { + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally{ + // 关闭返回的reponse + if(reponse!=null){ + reponse.close(); + } + if(client!=null){ + // 关闭client + client.close(); + } + } + return resultStr; + } + + private static String getBoundaryStr() { + String boundary = UUID.randomUUID().toString().replace("-", ""); + return boundary; + } + + + private static MultipartEntityBuilder get_COMPATIBLE_Builder(String charSet,String boundarStr) { + MultipartEntityBuilder result = MultipartEntityBuilder.create(); + result.setBoundary(boundarStr) + .setCharset(Charset.forName(charSet)) + .setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + return result; + } + + + private static HttpPost getMultipartPost(String url,String boundarStr) { + /* 这里设置一些post的头部信息,具体求百度吧 */ + HttpPost post = new HttpPost(url); + post.addHeader("Connection", "keep-alive"); + post.addHeader("Accept", "*/*"); + post.addHeader("Content-Type", "multipart/form-data;boundary=" + + boundarStr); + post.addHeader("User-Agent", + "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); + return post; + } + + private static HttpGet getHttpGet(String url){ + HttpGet get = new HttpGet(url); + + return get; + } + + private static SSLContext getTrustAllSSLContext() throws Exception { +// SSLContext context = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() { +// +// @Override +// public boolean isTrusted(X509Certificate[] arg0, String arg1) +// throws java.security.cert.CertificateException { +// // 这一句就是信任任何的证书,当然你也可以去验证服务器的真实性 +// return true; +// } +// }).build(); + SSLContext context = SSLContext.getDefault(); + return context; + } + + public static void main(String[] args) throws IOException { + File file =new File("/Users/qi_liang/Downloads/timg.jpeg"); + String url = "https://api.weixin.qq.com/cgi-bin/media/upload"; + Map params = new HashMap(); + params.put("access_token", "10_0oKKCsF9JL30JeGZDyfNWDhiaRvivAL9vs9ihvaledzBuPVM6IMvwcFUc58AFwlETRdvEBAFXOYbF2GoKmbtMmopCs78m9UE8whgrYU4kJww4mSooMcq8el-qnU4JdjPGKruZLjdNS246hXyWOHbAAAHZS"); + params.put("type", "image"); + if(file.exists()){ + params.put("media", file); + } + String resultStr = post(url,params); + System.out.println(resultStr); + } + +} diff --git a/panda-code/src/main/java/org/panda/code/uitl/os/JvmUtil.java b/panda-code/src/main/java/org/panda/code/uitl/os/JvmUtil.java new file mode 100644 index 0000000..c26e523 --- /dev/null +++ b/panda-code/src/main/java/org/panda/code/uitl/os/JvmUtil.java @@ -0,0 +1,107 @@ +package org.panda.code.uitl.os; + +import org.panda.code.uitl.os.mode.JvmInfo; + +import java.text.DecimalFormat; +import java.util.Properties; +import java.util.Set; + +/** + * @author qi + * Created by qi_liang on 2018/6/9. + */ +public class JvmUtil { + + static Properties properties = System.getProperties(); + static Runtime runtime = Runtime.getRuntime(); + + /** + * 获取java版本号 + * @return + */ + public static String getVersion(){ + + return properties.getProperty("java.version"); + } + + /** + * 获取Java 环境供应商名称 + */ + public static String getVendor(){ + + return properties.getProperty("java.vendor"); + } + + /** + * 获取java 环境供应商url + */ + public static String getVendorUrl(){ + return properties.getProperty("java.vendor.url"); + } + + /** + * 获取java安装路径 + * @param + */ + public static String getHome(){ + + return properties.getProperty("java.home"); + } + + /** + * 获取虚拟机可以使用的总内存 + */ + public static Long getTotalMemory(){ + + return runtime.totalMemory(); + } + /** + * 获取虚拟机可以使用的数据器个数 + */ + private static Integer getCupNum(){ + return runtime.availableProcessors(); + } + /** + * 返回jvm 信息 + */ + + public static JvmInfo getInfo(){ + JvmInfo jvmInfo = new JvmInfo(); + jvmInfo.setVersion(getVersion()); + jvmInfo.setCupNum(getCupNum()); + jvmInfo.setTotalMemory(getTotalMemory()); + return jvmInfo; + } + + /** + * + * @param args + */ + + /** + * Starts the program + * + * @param args the command line arguments + */ + public static void main(String[] args) { + new JvmUtil().displayAvailableMemory(); + } + + /** + * 显示JVM总内存,JVM最大内存和总空闲内存 + */ + public void displayAvailableMemory() { + DecimalFormat df = new DecimalFormat("0.00") ; + + //显示JVM总内存 + long totalMem = Runtime.getRuntime().totalMemory(); + System.out.println(df.format(totalMem/1024/1024) + " MB"); + //显示JVM尝试使用的最大内存 + long maxMem = Runtime.getRuntime().maxMemory(); + System.out.println(df.format(maxMem ) + " MB"); + //空闲内存 + long freeMem = Runtime.getRuntime().freeMemory(); + System.out.println(df.format(freeMem ) + " MB"); + } + +} diff --git a/panda-code/src/main/java/org/panda/code/uitl/os/NetUtil.java b/panda-code/src/main/java/org/panda/code/uitl/os/NetUtil.java index a8d2ea0..aa4c2c2 100644 --- a/panda-code/src/main/java/org/panda/code/uitl/os/NetUtil.java +++ b/panda-code/src/main/java/org/panda/code/uitl/os/NetUtil.java @@ -3,7 +3,9 @@ package org.panda.code.uitl.os; import java.net.InetAddress; import java.net.UnknownHostException; -/** 获取计算机网络信息 +/** + * @author qi + * 获取计算机网络信息 * Created by qi_liang on 2018/6/9. */ public class NetUtil { diff --git a/panda-code/src/main/java/org/panda/code/uitl/os/OsUtil.java b/panda-code/src/main/java/org/panda/code/uitl/os/OsUtil.java new file mode 100644 index 0000000..ab90ba6 --- /dev/null +++ b/panda-code/src/main/java/org/panda/code/uitl/os/OsUtil.java @@ -0,0 +1,52 @@ +package org.panda.code.uitl.os; + +import org.panda.code.uitl.os.mode.OsInfo; + +import java.util.Properties; + +/** + * @author qi + * 获取计算机操作系统信息 + * Created by qi_liang on 2018/6/9. + */ +public class OsUtil { + static Properties properties = System.getProperties(); + + +// +// public OsUtil(OperatingSystem os){ +// this.os = os; +// +// } +// +// /** +// * 操作系统 +// */ +// public static String getArch(){ +// return os.getArch(); +// } +// +// /** +// * +// */ +// public static String getCpuEndian(){ +// return os.getCpuEndian(); +// } +// +// public static String getDateModel(){ +// +// return os.getDataModel(); +// } + + public static OsInfo getInfo(){ + OsInfo osInfo = new OsInfo(); + osInfo.setOsVersion(properties.getProperty("os.version")); + osInfo.setOsName(properties.getProperty("os.name")); + osInfo.setArch(properties.getProperty("os.arch")); + return osInfo; + } + + + + +} diff --git a/panda-code/src/main/java/org/panda/code/uitl/os/mode/JvmInfo.java b/panda-code/src/main/java/org/panda/code/uitl/os/mode/JvmInfo.java new file mode 100644 index 0000000..f376dab --- /dev/null +++ b/panda-code/src/main/java/org/panda/code/uitl/os/mode/JvmInfo.java @@ -0,0 +1,38 @@ +package org.panda.code.uitl.os.mode; + +/** + * @author qi + * Created by qi_liang on 2018/6/10. + */ +public class JvmInfo { + //版本号 + private String version; + //总内存 + private Long totalMemory; + //可以使用处理器个数 + private Integer cupNum; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Long getTotalMemory() { + return totalMemory; + } + + public void setTotalMemory(Long totalMemory) { + this.totalMemory = totalMemory; + } + + public Integer getCupNum() { + return cupNum; + } + + public void setCupNum(Integer cupNum) { + this.cupNum = cupNum; + } +} diff --git a/panda-code/src/main/java/org/panda/code/uitl/os/mode/OsInfo.java b/panda-code/src/main/java/org/panda/code/uitl/os/mode/OsInfo.java new file mode 100644 index 0000000..5830b4e --- /dev/null +++ b/panda-code/src/main/java/org/panda/code/uitl/os/mode/OsInfo.java @@ -0,0 +1,39 @@ +package org.panda.code.uitl.os.mode; + +/** + * @author qi + * Created by qi_liang on 2018/6/10. + */ +public class OsInfo { + + //操作系统名称 + private String osName; + //操作系统版本号 + private String osVersion; + //操作系统架构 + private String arch; + + public String getOsName() { + return osName; + } + + public void setOsName(String osName) { + this.osName = osName; + } + + public String getOsVersion() { + return osVersion; + } + + public void setOsVersion(String osVersion) { + this.osVersion = osVersion; + } + + public String getArch() { + return arch; + } + + public void setArch(String arch) { + this.arch = arch; + } +} diff --git a/panda-jdbc/panda-jdbc.iml b/panda-jdbc/panda-jdbc.iml index d2a45c7..49f74a8 100644 --- a/panda-jdbc/panda-jdbc.iml +++ b/panda-jdbc/panda-jdbc.iml @@ -19,6 +19,11 @@ + + + + + @@ -33,5 +38,6 @@ + \ No newline at end of file diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/BeanHander.java b/panda-jdbc/src/main/java/org/panda/jdbc/BeanHander.java index 179da06..21c1491 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/BeanHander.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/BeanHander.java @@ -11,6 +11,7 @@ import java.sql.SQLException; /** * @author qi + * 结果集处理类 */ public class BeanHander implements ResultSetHandler { diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/BeanListHandler.java b/panda-jdbc/src/main/java/org/panda/jdbc/BeanListHandler.java index 28ca3cc..7891081 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/BeanListHandler.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/BeanListHandler.java @@ -6,6 +6,7 @@ import java.util.List; /** * @author qi + * 结果集(集合)处理类 */ public class BeanListHandler implements ResultSetHandler { diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/ResultSetHandler.java b/panda-jdbc/src/main/java/org/panda/jdbc/ResultSetHandler.java index 3252653..2a8b8da 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/ResultSetHandler.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/ResultSetHandler.java @@ -5,7 +5,6 @@ import java.sql.ResultSet; /** * @author qi * 结果集处理接口 - * */ public interface ResultSetHandler { diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/mode/DbInfo.java b/panda-jdbc/src/main/java/org/panda/jdbc/mode/DbInfo.java index 7811a15..ecc2486 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/mode/DbInfo.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/mode/DbInfo.java @@ -1,6 +1,7 @@ package org.panda.jdbc.mode; /** + * @author qi * 数据库详情实体 * Created by qi_liang on 2018/6/10. */ diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/mode/Table.java b/panda-jdbc/src/main/java/org/panda/jdbc/mode/Table.java index 813851b..da91dfe 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/mode/Table.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/mode/Table.java @@ -3,6 +3,7 @@ package org.panda.jdbc.mode; import java.util.List; /** + * @author qi * 数据库表实体 * Created by qi_liang on 2018/6/2. */ diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/sql/AbstractDbBuiler.java b/panda-jdbc/src/main/java/org/panda/jdbc/sql/AbstractDbBuiler.java index b8fbbfe..0944419 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/sql/AbstractDbBuiler.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/sql/AbstractDbBuiler.java @@ -9,7 +9,7 @@ import java.util.Set; /** * @author qi * 抽象类-sql构造器 - * 实现的子类有: MysqlBuilder ,OragleBuilder (为应对不同数据库特色,有部分方法抽象,由子类实现) + * 实现的子类有: MysqlBuilder ,OragleBuilder (为应对不同数据库特点,有部分方法抽象,由子类实现) * Created by qi_liang on 2018/6/2. */ public abstract class AbstractDbBuiler { @@ -47,7 +47,8 @@ public abstract class AbstractDbBuiler { /** * 构建新增sql语句 - * @param obj + * @param obj + * @param fieldMap * @return */ abstract public String insertSql(Object obj, Map fieldMap); diff --git a/panda-jdbc/src/main/java/org/panda/jdbc/sql/BeanSqlUtil.java b/panda-jdbc/src/main/java/org/panda/jdbc/sql/BeanSqlUtil.java index caa4a28..19e341a 100644 --- a/panda-jdbc/src/main/java/org/panda/jdbc/sql/BeanSqlUtil.java +++ b/panda-jdbc/src/main/java/org/panda/jdbc/sql/BeanSqlUtil.java @@ -11,6 +11,7 @@ import java.util.Map; /** * @author qi + * 维护类名和数据库字段工具类 */ public class BeanSqlUtil { diff --git a/panda-jdbc/src/test/java/org/panda/entity/SysUser.java b/panda-jdbc/src/test/java/org/panda/entity/SysUser.java index 82941a9..b5a9826 100644 --- a/panda-jdbc/src/test/java/org/panda/entity/SysUser.java +++ b/panda-jdbc/src/test/java/org/panda/entity/SysUser.java @@ -53,4 +53,15 @@ public class SysUser { public void setStatus(int status) { this.status = status; } + + @Override + public String toString() { + return "SysUser{" + + "id=" + id + + ", name='" + name + '\'' + + ", createTime=" + createTime + + ", updateTime=" + updateTime + + ", status=" + status + + '}'; + } } diff --git a/panda-jdbc/src/test/java/org/panda/jdbc/sql/MysqlBuilderTest.java b/panda-jdbc/src/test/java/org/panda/jdbc/sql/MysqlBuilderTest.java index 9359b94..bf97774 100644 --- a/panda-jdbc/src/test/java/org/panda/jdbc/sql/MysqlBuilderTest.java +++ b/panda-jdbc/src/test/java/org/panda/jdbc/sql/MysqlBuilderTest.java @@ -1,5 +1,6 @@ package org.panda.jdbc.sql; +import com.github.jsonzou.jmockdata.JMockData; import org.junit.Test; import org.panda.entity.SysUser; @@ -67,4 +68,46 @@ public class MysqlBuilderTest { @Test public void deleteSql1() { } + + @Test + public void automaticUpdateDb1() { + } + + @Test + public void concatPageSql1() { + } + + @Test + public void createTableStr1() { + } + + @Test + public void insertSql2() { + AbstractDbBuiler abstractDbBuiler = new MysqlBuilder(); + SysUser sysUser = JMockData.mock(SysUser.class); + System.out.println(sysUser); + sysUser.setId(null); + String insertSql = abstractDbBuiler.insertSql(sysUser); + System.out.println(insertSql); + } + + @Test + public void insertSql3() { + } + + @Test + public void updateSql2() { + } + + @Test + public void updateSql3() { + } + + @Test + public void deleteSql2() { + } + + @Test + public void deleteSql3() { + } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1b70e9a..c83cd47 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,13 @@ test + + + com.github.jsonzou + jmockdata + 3.0.1 + test +