From 84598d76031fbe9ff9abbead2df2b1b6b007bbfd Mon Sep 17 00:00:00 2001 From: xiangwb Date: Tue, 10 Apr 2018 14:39:00 +0800 Subject: [PATCH] merge --- .../com/xwbing/constant/CommonConstant.java | 16 -- .../java/com/xwbing/constant/CommonEnum.java | 64 ----- .../src/main/java/com/xwbing/demo/Ademo.java | 12 - .../java/com/xwbing/demo/CalendarDemo.java | 83 ------- .../java/com/xwbing/demo/CollectionDemo.java | 207 ----------------- .../xwbing/demo/CompletableFutureDemo.java | 155 ------------- .../com/xwbing/demo/CreateOrderNoDemo.java | 55 ----- .../main/java/com/xwbing/demo/FileDemo.java | 72 ------ .../java/com/xwbing/demo/FileUploadDemo.java | 85 ------- .../main/java/com/xwbing/demo/ForEachMap.java | 72 ------ .../src/main/java/com/xwbing/demo/IODemo.java | 98 -------- .../java/com/xwbing/demo/Java8DateDemo.java | 87 ------- .../main/java/com/xwbing/demo/JsonDemo.java | 118 ---------- .../main/java/com/xwbing/demo/LambdaDemo.java | 182 --------------- .../java/com/xwbing/demo/RecursiveFIle.java | 29 --- .../com/xwbing/demo/ReentrantLockDemo.java | 71 ------ .../main/java/com/xwbing/demo/StringDemo.java | 94 -------- .../main/java/com/xwbing/demo/ThreadDemo.java | 138 ----------- .../xwbing/demo/ThreadProducerConsumer.java | 99 -------- .../java/com/xwbing/demo/ThreadSyncDemo.java | 159 ------------- .../main/java/com/xwbing/demo/XmlDemo.java | 97 -------- .../java/com/xwbing/demo/chat/Client.java | 89 ------- .../java/com/xwbing/demo/chat/Server.java | 189 --------------- .../java/com/xwbing/demo/oracle/day01.sql | 138 ----------- .../java/com/xwbing/demo/oracle/day02.sql | 173 -------------- .../java/com/xwbing/demo/oracle/day03.sql | 151 ------------ .../java/com/xwbing/demo/oracle/day04.sql | 176 -------------- .../java/com/xwbing/demo/oracle/day05.sql | 218 ------------------ .../com/xwbing/domain/entity/ExpressInfo.java | 24 -- .../xwbing/domain/entity/ExpressTrace.java | 15 -- .../domain/entity/model/EntityModel.java | 21 -- .../domain/entity/model/ValidateModel.java | 49 ---- .../domain/entity/vo/ExpressInfoVo.java | 37 --- .../java/com/xwbing/service/DemoService.java | 20 -- .../service/other/CookieSessionService.java | 64 ----- .../service/other/ExpressDeliveryService.java | 114 --------- .../com/xwbing/service/other/MailService.java | 138 ----------- .../service/other/QRCodeZipService.java | 129 ----------- .../src/main/resources/file/QRCode.png | Bin 326 -> 0 bytes boot-service/src/main/resources/file/logo.png | Bin 170 -> 0 bytes .../src/main/resources/kdniao.properties | 6 - .../configuration/SchedulingConfig.java | 26 --- .../xwbing/configuration/SwaggerConfig.java | 22 -- .../controller/other/MailTestControl.java | 69 ------ .../xwbing/controller/other/TestControl.java | 169 -------------- boot-web/src/main/resources/file/QRCode.png | Bin 326 -> 0 bytes 46 files changed, 4030 deletions(-) delete mode 100644 boot-service/src/main/java/com/xwbing/demo/Ademo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/CalendarDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/CollectionDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/CompletableFutureDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/CreateOrderNoDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/FileDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/FileUploadDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/ForEachMap.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/IODemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/Java8DateDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/JsonDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/RecursiveFIle.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/ReentrantLockDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/StringDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/ThreadDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/ThreadProducerConsumer.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/ThreadSyncDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/XmlDemo.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/chat/Client.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/chat/Server.java delete mode 100644 boot-service/src/main/java/com/xwbing/demo/oracle/day01.sql delete mode 100644 boot-service/src/main/java/com/xwbing/demo/oracle/day02.sql delete mode 100644 boot-service/src/main/java/com/xwbing/demo/oracle/day03.sql delete mode 100644 boot-service/src/main/java/com/xwbing/demo/oracle/day04.sql delete mode 100644 boot-service/src/main/java/com/xwbing/demo/oracle/day05.sql delete mode 100644 boot-service/src/main/java/com/xwbing/domain/entity/ExpressInfo.java delete mode 100644 boot-service/src/main/java/com/xwbing/domain/entity/ExpressTrace.java delete mode 100644 boot-service/src/main/java/com/xwbing/domain/entity/model/EntityModel.java delete mode 100644 boot-service/src/main/java/com/xwbing/domain/entity/model/ValidateModel.java delete mode 100644 boot-service/src/main/java/com/xwbing/domain/entity/vo/ExpressInfoVo.java delete mode 100644 boot-service/src/main/java/com/xwbing/service/DemoService.java delete mode 100644 boot-service/src/main/java/com/xwbing/service/other/CookieSessionService.java delete mode 100644 boot-service/src/main/java/com/xwbing/service/other/ExpressDeliveryService.java delete mode 100644 boot-service/src/main/java/com/xwbing/service/other/MailService.java delete mode 100644 boot-service/src/main/java/com/xwbing/service/other/QRCodeZipService.java delete mode 100644 boot-service/src/main/resources/file/QRCode.png delete mode 100644 boot-service/src/main/resources/file/logo.png delete mode 100644 boot-service/src/main/resources/kdniao.properties delete mode 100644 boot-web/src/main/java/com/xwbing/configuration/SchedulingConfig.java delete mode 100644 boot-web/src/main/java/com/xwbing/controller/other/MailTestControl.java delete mode 100644 boot-web/src/main/java/com/xwbing/controller/other/TestControl.java delete mode 100644 boot-web/src/main/resources/file/QRCode.png diff --git a/boot-service/src/main/java/com/xwbing/constant/CommonConstant.java b/boot-service/src/main/java/com/xwbing/constant/CommonConstant.java index e01928d..6b36e35 100644 --- a/boot-service/src/main/java/com/xwbing/constant/CommonConstant.java +++ b/boot-service/src/main/java/com/xwbing/constant/CommonConstant.java @@ -28,14 +28,6 @@ public class CommonConstant { * 邮件服务器配置项 */ public static final String EMAIL_KEY = "email_config"; - /** - * 当前登录用户 - */ - public static final String CURRENT_USER = "current_user"; - /** - * 当前登录用户id - */ - public static final String CURRENT_USER_ID = "current_id"; /** * 权限树 */ @@ -48,12 +40,4 @@ public class CommonConstant { * 导出报表列名称 */ public static final String[] USER_REPORT_COLUMNS = new String[]{" 名字", "用户名", "性别", "邮箱", "是否为管理员"}; - /** - * 中国各省市 - */ - public static final String CHINA = "北京,天津,河北,山西,内蒙古,辽宁,吉林,黑龙江,上海,江苏,安徽,福建,江西,山东,河南,湖北,湖南,广东,广西,海南,重庆,四川,贵州,云南,西藏,陕西,甘肃,青海,宁夏,新疆,台湾,香港,澳门"; - /** - * 浙江各市 - */ - public static final String ZHEJIANG = "杭州,宁波,温州,绍兴,湖州,嘉兴,金华,衢州,台州,丽水,舟山"; } diff --git a/boot-service/src/main/java/com/xwbing/constant/CommonEnum.java b/boot-service/src/main/java/com/xwbing/constant/CommonEnum.java index b21fc01..d1fab05 100644 --- a/boot-service/src/main/java/com/xwbing/constant/CommonEnum.java +++ b/boot-service/src/main/java/com/xwbing/constant/CommonEnum.java @@ -105,70 +105,6 @@ public class CommonEnum { } } - /** - * 快递鸟物流状态 - */ - public enum ExpressStatusEnum { - NO_MSG("无信息", 0), - HAS_TAKE("已取件", 1), - ON_THE_WAY("在途中", 2), - RECEIVED("已签收", 3), - QUESTION("问题件", 4), - TO_TAKE("待取件", 5), - TO_SEND("待派件", 6), - HAS_SHIPPED("已发货", 8), - UN_SHIPPED("未发货", 9); - private String name; - private int value; - - ExpressStatusEnum(String name, int value) { - this.name = name; - this.value = value; - } - - public int getValue() { - return value; - } - - public String getName() { - return name; - } - } - - /** - * 快递鸟 快递公司编码 - */ - public enum ShipperCodeEnum { - SF("顺丰速运", "SF"), - HTKY("百世快递", "HTKY"), - ZTO("中通快递", "ZTO"), - STO("申通快递", "STO"), - YTO("圆通速递", "YTO"), - YD("韵达速递", "YD"), - YZPY("邮政快递包裹", "YZPY"), - EMS("EMS", "EMS"), - HHTT("天天快递", "HHTT"), - JD("京东物流", "JD"), - AMAZON("亚马逊", "AMAZON"), - ZJS("宅急送", "ZJS"); - private String name; - private String code; - - ShipperCodeEnum(String name, String code) { - this.name = name; - this.code = code; - } - - public String getName() { - return name; - } - - public String getCode() { - return code; - } - - } - public static void main(String[] args) { String code = "Y"; // for (YesOrNoEnum yesOrNoEnum : YesOrNoEnum.values()) { diff --git a/boot-service/src/main/java/com/xwbing/demo/Ademo.java b/boot-service/src/main/java/com/xwbing/demo/Ademo.java deleted file mode 100644 index a3f9b0c..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/Ademo.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xwbing.demo; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2018/1/23 14:45 - * 作者: xiangwb - * 说明: 测试用 - */ -public class Ademo { - public static void main(String[] args) { - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/CalendarDemo.java b/boot-service/src/main/java/com/xwbing/demo/CalendarDemo.java deleted file mode 100644 index f673804..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/CalendarDemo.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.xwbing.demo; - -import java.util.Calendar; -import java.util.Date; - -/** - * 创建日期: 2017年2月16日 下午3:32:04 - * 作者: xiangwb - */ - -public class CalendarDemo { - public static void main(String[] args) { - Calendar calendar = Calendar.getInstance(); - Date date = calendar.getTime(); - calendar.setTime(date); - - - - /* - * 设置calendar,使其表示 2008-08-08 08:08:08 - */ - calendar.set(Calendar.YEAR, 2008);// 年 - calendar.set(Calendar.MONTH, 7);// 月从0开始,0表示1月 - /* - * 设置日 对应的时间分量常用的: DATE:月中天 DAY_OF-MONTH:月中的天,与DATE一致 - * DAY_OF_WEEK:周中的天,星期几 DAY_OF_YEAR:年中的天 - */ - calendar.set(Calendar.DAY_OF_MONTH, 8);// 日 - calendar.set(Calendar.HOUR_OF_DAY, 8);// 时 - calendar.set(Calendar.MINUTE, 8);// 分 - calendar.set(Calendar.SECOND, 8);// 秒 - System.out.println(calendar.getTime()); - /* - * int get(int field) 获取对应的分量的值 - */ - Calendar now = Calendar.getInstance(); - int year = now.get(Calendar.YEAR);// 获取年 - int month = now.get(Calendar.MONTH) + 1;// 获取月+1 - int day = now.get(Calendar.DATE);// 获取日 - int house = now.get(Calendar.HOUR);// 时 - int minute = now.get(Calendar.MINUTE);// 分 - int second = now.get(Calendar.SECOND);// 秒 - System.out.println(year + "-" + month + "-" + day + " " + house + ":" + minute + ":" + second); - - - // 查看星期几 - int week = now.get(Calendar.DAY_OF_WEEK); - System.out.println("周" + (week == 1 ? 7 : week - 1)); - // 当年过了几天 - int doy = now.get(Calendar.DAY_OF_YEAR); - System.out.println(year + "年已经过了" + doy + "天"); - // 当月共有多少天 - int days = now.getActualMaximum(Calendar.DAY_OF_MONTH); - System.out.println("本月共有" + days + "天"); - // 当年共有多少天 - int years = now.getActualMaximum(Calendar.DAY_OF_YEAR); - System.out.println("今年共有" + years + "天"); - // 查看今年2月份有几天 - now.set(Calendar.MONTH, 1); - System.out.println(now.getActualMaximum(Calendar.DAY_OF_MONTH)); - - - - - /* - * 查看3年2个月零8天以后的日期? - */ - Calendar nowTime = Calendar.getInstance(); - System.out.println(nowTime.getTime()); - nowTime.add(Calendar.YEAR, 3); - nowTime.add(Calendar.MONTH, 2); - nowTime.add(Calendar.DAY_OF_YEAR, 8);// 用DAY_OF_YEAR - System.out.println(nowTime.getTime()); - /* - * 当遇到类似开发需求: 要求用户输入一个日期,然后对该日期进行一系列的运算 再将计算后的日期显示给用户时。 流程如下: - * 1:获取用户输入的日期字符串 - * 2:使用SimpleDateFormat将其转换为Date - * 3:创建一个Calendar。使其表示Date表示的日期 - * 4:使用Calendar根据需求计算时间 - * 5:将Calendar转换为一个Date 6:使用SimpleDateFormal将Date转换为字符串后显示给用户 - */ - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/CollectionDemo.java b/boot-service/src/main/java/com/xwbing/demo/CollectionDemo.java deleted file mode 100644 index 3d0484a..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/CollectionDemo.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.xwbing.demo; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; - -import java.util.*; - -/** - * 创建日期: 2017年2月16日 下午4:06:56 - * 作者: xiangwb - * 说明: ArrayList初始容量为10,容量不足,会扩充为原有容量的1.5倍+1。然后通过底层的复制方法将原有数据复制过来 - */ - -public class CollectionDemo { - public static void main(String[] args) { - /** - * 数组 - */ - int[] arr1 = new int[4]; - int[] arr2 = new int[]{1, 3, 5, 7}; - int[] arr3 = {12, 3, 5, 6, 2, 8, 9, 4}; - for (int i = 0; i < arr3.length - 1; i++) {//选择排序 - for (int j = i + 1; j < arr3.length; j++) { - if (arr3[i] > arr3[j]) { - int temp = arr3[i]; - arr3[i] = arr3[j]; - arr3[j] = temp; - } - } - } - for (int i = 0; i < arr3.length - 1; i++) {//冒泡排序 - for (int j = 0; j < arr3.length - 1 - i; j++) { - if (arr3[j] > arr3[j + 1]) { - int t = arr3[j]; - arr3[j] = arr3[j + 1]; - arr3[j + 1] = t; - } - } - } - /** - * 数组字符串操作 - */ - String[] arrays = {"1", "2", "3", "4"}; - List strings = Arrays.asList(arrays); - String arrayStr = JSONArray.toJSONString(strings);//数组字符串 - JSONArray jsonArray = JSON.parseArray(arrayStr);//转为JSONArray - jsonArray.add("5");//相应操作 - String jsonString = JSON.toJSONString(jsonArray);//转为数组字符串 - - /** - * 数组转集合 该集合表示原来的数组 对集合的操作就是对数组的操作,那么添加元素会导致原数组扩容, - * 那么就不能表示原来的数组了,会抛出UnsupportedOperationException异常 - */ - String[] array = {"one", "two", "three", "four"}; - List coll = Arrays.asList(array); - /* - * 所有的集合提供了一个带有collection类型参数的构造方法 该构造方法称为:复制构造器 - * 作用是在创建当前集合的同时,集合中包含给定集合中的所有元素 - */ - List list1 = new ArrayList<>(coll); - - /** - * 集合转数组 - */ - List lsit = new ArrayList<>(2); - lsit.add("guan"); - lsit.add("bao"); - String[] arrayy = new String[lsit.size()];// 大小为list.size() - /* - * toArray(T[] array): 若给定的数组可用(数组可以存放集合所有的元素)时 - * 则使用该数组,若不可用,会自动创建一个与给定数组同类型的数组 - */ - arrayy = lsit.toArray(arrayy); - - /** - * 基本api - */ - List list = new ArrayList<>();// 有序 - list.add(1); - list.add(0, 0);// 元素插入到指定位置 - list.add(2); - list.add(3); - list.add(5); - list.add(4); - list.add(6); - System.out.println(list); - Integer old = list.set(1, 11);// 替换元素,返回值为原位置的元素 - Integer one = list.get(0);// 获取下标元素 - list.remove(Integer.valueOf(6)); - list.remove(0);// 从集合中删除指定位置的元素,并将其返回 - int size = list.size();// 长度 - boolean isEmpty = list.isEmpty();// 是否为空 - boolean contains = list.contains(1);// 是否包含元素 - // l.clear();//清除集合元素 - Set s = new HashSet<>();// 无序 - s.add(111); - s.add(222); - s.add(333); - list.addAll(s);// 添加集合 - contains = list.containsAll(s);// 是否包含集合 - list.removeAll(s);// 清除共有的元素 - System.out.println(list); - /** - * ArrayList的subList结果不可强转成ArrayList 子集,含头不含尾,对子集的修改,就是原集合相应的内容 - */ - List subList = list.subList(0, 1); - list.subList(0, 1).clear();// 删除集合中0-1的元素 - Collections.sort(list);// 对集合进行从小到大排序 - Collections.reverse(list);// 反转 - System.out.println(list); - - /** - * 新循环foreach遍历集合,编译器会将它改为迭代器方式遍历, 所以在使用新循环遍历集合时,不能通过集合的方法增删元素 - */ - for (Integer o : list) { - // list.remove(o); - } - /** - * lambda表达式 - */ - list.forEach(System.out::println); - //删除某元素 - list.removeIf(integer -> integer == 0); - - /** - * 迭代器 - */ - Iterator it = list.iterator();// 获取用于遍历当前集合的迭代器 - while (it.hasNext()) { - Integer str = it.next(); - if (1 == str) { - /* - * 在使用迭代器遍历集合时,不要使用集合的方法曾删元素,否则会引发异常 - */ - // list.remove(str); - it.remove(); - } - } - - /** - * 自定义排序 推荐匿名内部类形式创建比较器 - */ - Comparator com = new Comparator() {// 返回正数,零,负数各代表大于,等于,小于 - public int compare(Integer o1, Integer o2) { - return o2 - o1; - } - }; - Collections.sort(list, com); - System.out.println(list); - /** - * lambda表达式 - */ - list.sort(Comparator.comparingInt(o -> o)); - - /* - * 队列 队列也可以存放一组元素,但是存取元素必须 遵循:先进先出原则 - * linkedlist也实现类队列接口,因为它可以保存一组元素,并且首尾增删块快,正好符合队列特点 - */ - Queue queue = new LinkedList(); - queue.offer("one");// 入队操作,向队尾追加一个新元素 - queue.offer("two"); - queue.offer("three"); - queue.offer("four"); - System.out.println(queue); - String str = queue.poll();// 出队操作,从队首获取元素,获取后该元素就从队列中被删除了 - System.out.println(str); - System.out.println(queue); - str = queue.peek();// 引用队首元素,但是不做出队操作 - System.out.println(str); - System.out.println(queue); - System.out.println("遍历开始"); - System.out.println("lenth:" + queue.size()); - /* - * 遍历从后往前 因为size一直在变,从前往后会没取完 - */ - // for (int i = queue.size(); i >0; i--) { - // str=queue.poll(); - // System.out.println(str); - // } - while (queue.size() > 0) { - str = queue.poll(); - System.out.println(str); - } - System.out.println("遍历结束"); - System.out.println(queue); - - /** - * 栈 存储一组元素,但是存取元素必须遵循先进后出原则 通常为了实现后退这类功能时会使用栈 - */ - /* - * java.util.Deque 双端队列,两端都可以进出队 当只调用从一端进出对操作时,就形成了栈结构 因此,双端队列为栈提供类两个方法: - * push ,pop - */ - Deque stack = new LinkedList(); - stack.push("one");// 入栈操作,最后入栈的元素在栈顶(第一个元素位置) - stack.push("two"); - stack.push("three"); - stack.push("four"); - System.out.println(stack); - str = stack.poll();// 出栈操作,第一个元素先出 - System.out.println(str); - System.out.println(stack); - str = stack.peek();// 引用队首元素,但是不做出队操作 - System.out.println(str); - System.out.println(stack); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/CompletableFutureDemo.java b/boot-service/src/main/java/com/xwbing/demo/CompletableFutureDemo.java deleted file mode 100644 index 0c0727c..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/CompletableFutureDemo.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.xwbing.demo; - -import com.alibaba.fastjson.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2018/2/6 10:54 - * 作者: xiangwb - * 说明: apply进行转换,有返回值。accept进行消耗,无返回值 - * supplyAsync()有返回值,runAsync()无返回值 - * 参数: Function(函数)有返回值 Consumer(消费者)无返回值 - */ -public class CompletableFutureDemo { - private static final Logger logger = LoggerFactory.getLogger(CompletableFutureDemo.class); - - /** - * 结合两个CompletionStage的结果,进行转化后返回 - * - * @return 有返回值 - */ - public static JSONObject thenCombine() { - return CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "hello"; - }).thenCombine(CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - //出现异常,异常会被限制在执行任务的线程的范围内,最终会杀死该线程,而这会导致等待 get 方法返回结果的线程永久地被阻塞。 - if (1 == 1) - throw new RuntimeException("异常"); - return "world"; - }), (s1, s2) -> { - JSONObject object = new JSONObject(); - object.put("s1", s1); - object.put("s2", s2); - return object; - }) -// .exceptionally(e -> {//捕获CompletionException,如有全局异常处理,可省略 -// throw new RuntimeException(e.getMessage()); -// }) - .join(); - } - - public static void main(String[] args) { - long l = System.currentTimeMillis(); - thenCombine(); - long l1 = System.currentTimeMillis(); - System.out.println(l1 - l); - } - - /** - * 结合两个CompletionStage的结果,进行消耗 - * - * @return void - */ - public static JSONObject thenAcceptBoth() { - JSONObject jsonObject = new JSONObject(); - CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "hello"; - }).thenAcceptBoth(CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "world"; - }), (s1, s2) -> { - jsonObject.put("s1", s1); - jsonObject.put("s2", s2); - }).join(); - return jsonObject; - } - - /** - * 在两个CompletionStage都运行完执行 - * 不关心这两个的结果,只关心这两个执行完毕,之后在进行操作(Runnable) - * - * @return void - */ - public static List runAfterBoth() { - List allResult = new ArrayList<>(); - List s1 = new ArrayList<>(); - List s2 = new ArrayList<>(); - CompletableFuture.runAsync(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - s1.add(1); - }).runAfterBothAsync(CompletableFuture.runAsync(() -> { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - s2.add(1); - }), () -> { - for (int i = 0; i < s1.size(); i++) { - Integer ii = s1.get(i); - for (int j = 0; j < s2.size(); j++) { - if (j == i) { - Integer jj = s2.get(j); - allResult.add(ii + jj); - break; - } - } - } - }).join(); - return allResult; - } - - /** - * 两个CompletionStage,谁计算的快,我就用那个CompletionStage的结果进行消耗。 - * - * @return void - */ - public static JSONObject acceptEither() { - JSONObject object = new JSONObject(); - CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "hello"; - }).acceptEither(CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "world"; - }), s -> object.put("s", s)).join(); - return object; - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/CreateOrderNoDemo.java b/boot-service/src/main/java/com/xwbing/demo/CreateOrderNoDemo.java deleted file mode 100644 index 941ea3e..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/CreateOrderNoDemo.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xwbing.demo; - -import org.apache.commons.collections.CollectionUtils; - -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -/** - * 说明: 订单编号生成 - * 创建日期: 2017年3月24日 下午5:06:37 - * 作者: xiangwb - */ - -public class CreateOrderNoDemo { - public synchronized static String getNo() { - String sequence = ""; - SimpleDateFormat sdf = new SimpleDateFormat("YYYY_MM_DD"); - String date = sdf.format(new Date()); - StringBuffer sql = new StringBuffer("select * from order_table"); - sql.append(" where order_no like '" + date + "%'"); - sql.append(" order by create_time desc"); - List list=queryList(); - if(CollectionUtils.isNotEmpty(list)){ - String orderNo = list.get(0).getOrderNo(); - long newOrderNo = Long.valueOf(orderNo.substring(8, 18)) + 1; - String sequ = new DecimalFormat("0000000000").format(newOrderNo); - sequence = date + sequ; - }else { - sequence = date + "0000000000"; - } - return sequence; - } - class Order{//模拟订单类 - String orderNo; - - public String getOrderNo() { - return orderNo; - } - - public void setOrderNo(String orderNo) { - this.orderNo = orderNo; - } - - } - public static List queryList(){//模拟查询 - return null; - } - public static void main(String[] args) { - long a=12356; - String sequ = new DecimalFormat("0000000000").format(a); - System.out.println(sequ); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/FileDemo.java b/boot-service/src/main/java/com/xwbing/demo/FileDemo.java deleted file mode 100644 index 4676897..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/FileDemo.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.xwbing.demo; - -import org.springframework.core.io.ClassPathResource; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; - -/** - * 说明: java.io.File File的每一个实例可以表示文件系统中的一个文件或目录 使用file可以: - * 1:访问文件或目录的属性(如:大小,名字,修改时间等) 2;操作文件或目录(创建,删除文件和目录) 3:访问目录中的所有内容 但是不可以 访问文件数据 - * 创建日期: 2017年2月17日 下午2:26:18 - * 作者: xiangwb - */ - -public class FileDemo { - public static void main(String[] args) throws IOException { - /* - * - * 文件 - * 尽量使用相对路径 - * 在eclipse中,"."当前目录,指的是 - * 项目的根目录 - */ - //创建文件对象 - File file = new File("." + File.separator + "demo.txt");//创建文件对象,并不创建文件 - if(!file.exists()){ - file.createNewFile(); //创建文件 - } - if(file.exists()){ - file.delete();//删除文件 - } - String name = file.getName();//获取文件名 - long length = file.length();//获取文件大小 - long time = file.lastModified();//获取文件最后修改时间 - //查看文件是否具有可运行,可读,可写的权限 - boolean b=file.canExecute(); - boolean b1=file.canRead(); - boolean b2=file.canWrite(); - boolean isDir = file.isDirectory();//是否为一个目录 - boolean isFile = file.isFile();//是否为一个文件 - boolean isHidden=file.isHidden();//是否为一个隐藏文件 - - /** - * 目录 - */ - File dir=new File("demo"); - File[] subs=dir.listFiles();//获取目录下的所有子项 - if(!dir.exists()){ - dir.mkdir(); - }else { - dir.delete();//空目录才能删除 - } - File dirs =new File("a"+File.separator+"b"+File.separator+"c"); - if(!dirs.exists()){ - /* - * 在创建当前目录的同时将不存在的父目录一并创建出来 - */ - dirs.mkdirs(); - } - /** - * 获取路径 - * java resources 编译后在WEB-INF/classes下 同级 - */ - String tomcatHome = System.getProperty("catalina.home");//服务器tomcat路径 - ClassPathResource pic = new ClassPathResource("file");//获取classes下file文件夹路径 - String absolutePath = pic.getFile().getAbsolutePath(); - //配置文件 - String filePath = IODemo.class.getResource("/redis.properties").getPath(); - InputStream in = IODemo.class.getResourceAsStream("/redis.properties"); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/FileUploadDemo.java b/boot-service/src/main/java/com/xwbing/demo/FileUploadDemo.java deleted file mode 100644 index 932b5bc..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/FileUploadDemo.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.xwbing.demo; - -import com.alibaba.fastjson.JSONObject; -import com.xwbing.exception.UtilException; -import org.springframework.core.io.ClassPathResource; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.commons.CommonsMultipartFile; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Base64; -import java.util.List; - -/** - * 作者: xiangwb - * 说明: FileUpload - */ -@Service -public class FileUploadDemo { - /** - * 获取文件数据 - * @param multipartFiles - * @return - */ - public List fileUpload(CommonsMultipartFile[] multipartFiles) { - List list = new ArrayList<>(); - JSONObject materialInfo; - for (MultipartFile multipartFile : multipartFiles) { - if (!multipartFile.isEmpty()) { - materialInfo=new JSONObject(); - String originName = multipartFile.getOriginalFilename();//原始名字 - materialInfo.put("name",originName); - String fileType = originName.substring(originName.lastIndexOf(".") + 1);//获取文件后缀名 - materialInfo.put("type",fileType); - byte[] data; - try { - InputStream is = multipartFile.getInputStream();//文件输入流 - data = new byte[is.available()]; - is.read(data); - is.close(); - } catch (IOException e) { - throw new UtilException("读取数据错误"); - } - String base64 = Base64.getEncoder().encodeToString(data);//对数据字节进行base64编码 - materialInfo.put("data",base64); - list.add(materialInfo); - } - } - return list; - } - - /** - * 采用file.Transto 来保存上传的文件 - * @param multipartFile - */ - public void fileUpload(CommonsMultipartFile multipartFile) { - if (!multipartFile.isEmpty()) { - String name = multipartFile.getOriginalFilename();//原始名字 - ClassPathResource file = new ClassPathResource("file"); - try { - String path = file.getFile().getAbsolutePath(); - File targetFile = new File(path+ File.separator+name); - if (!targetFile.exists()) { - targetFile.createNewFile(); - } - multipartFile.transferTo(targetFile); - } catch (IOException e) { - throw new UtilException("读取数据错误"); - } - } - } - - public static void main(String[] args) throws Exception{ - ClassPathResource file = new ClassPathResource("file"); - String path = file.getFile().getAbsolutePath(); - File targetFile = new File(path+ File.separator+"test.txt"); - if(!targetFile.exists()){ - targetFile.createNewFile(); //创建文件 - } - System.out.println(""); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/ForEachMap.java b/boot-service/src/main/java/com/xwbing/demo/ForEachMap.java deleted file mode 100644 index d835c3d..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/ForEachMap.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.xwbing.demo; - - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/** - * 遍历map - * 三种方式: - * 遍历所有的key - * 遍历所有的key-value对 - * 遍历所有的value(相对不常用) - * -------------------------------------------------------------------------------------------------------------------------------- - * 说明: HashMap初始容量capacity为16,加载因子loadFactor为0.75,临界值threshold=capacity*loadFactor,如果元素个数超过临界值,capacity*2 - * - * @author xiangwb - */ -public class ForEachMap { - public static void main(String[] args) { - Map map = new HashMap() { - { - put("语文", 99); - put("数学", 98); - put("英语", 97); - put("物理", 96); - put("化学", 99); - } - }; - /* - * 遍历所有的key - * set keySet() - * 该方法会将当前map中所有的key存入一个set集合后返回 - * 那么遍历该集合就等于遍历类所有的key - */ - Set keySet = map.keySet(); - for (String key : keySet) { - System.out.println(key); - } - /* - * 遍历每一组键值对(推荐) - * map中每一组键值对都是由map的内部类: - * java.util.map.entry的一个实例类表示的 - * entry有两个方法:getkey getvalue 可以分别获取这一组键值对中的key和value - * - * Set entrySet - * 该方法会将map中的每一组键对(entry实例) - * 存入一个set集合后返回 - */ - Set> entrySet = map.entrySet(); - for (Entry e : entrySet) { - String key = e.getKey(); - Integer value = e.getValue(); - System.out.println(key + ":" + value); - } - /* - * 遍历所有的value - * Collection values() - * 该方法会将当前map中所有的value存入一个集合后返回 - */ - Collection values = map.values(); - for (Integer value : values) { - System.out.println(value); - } - /* - * jdk1.8 - */ - map.forEach((k, v) -> System.out.println("key : " + k + "; value : " + v)); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/IODemo.java b/boot-service/src/main/java/com/xwbing/demo/IODemo.java deleted file mode 100644 index 5e48696..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/IODemo.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.xwbing.demo; - -import java.io.*; - -/** - * 创建日期: 2017年2月20日 上午10:12:20 - * 作者: xiangwb - */ - -public class IODemo { - public static void main(String[] args) throws Exception { - /** - * GBK:国标编码,中文占2字节 - * UTF-8:unicode的子集,其中文占3个字节 - * ISO8859-1:欧洲编码集,不支持中文 - */ - - /** - * 写 - */ - FileOutputStream fos = new FileOutputStream("fos.txt", true);//追加写模式 - fos.write("你好".getBytes("gbk")); - System.out.println("写出完毕"); - fos.close();//关闭流 - - /** - * 读 - */ - FileInputStream fis = new FileInputStream("fos.txt"); - byte[] data = new byte[fis.available()]; - int len = fis.read(data);//数据读入data里 - String str = new String(data, 0, len, "gbk"); - fis.close(); - - InputStream is = new ByteArrayInputStream(str.getBytes("gbk")); - byte[] da = new byte[is.available()]; - is.read(da); - is.close(); - /** - * 缓冲流 - * - */ - BufferedOutputStream bos = new BufferedOutputStream(fos); - bos.write("你好".getBytes()); - bos.close();//close前会自动flush,关流只需管最外层高级流 - - /** - * 使用缓冲流的形式复制文件 - */ - BufferedInputStream bis1 = new BufferedInputStream(fis); - BufferedOutputStream bos1 = new BufferedOutputStream(fos); - int d ; - while ((d = bis1.read()) != -1) { - bos1.write(d); - } - bis1.close(); - bos1.close(); - - /* - * 字符流 - * 读写单位是字符 - * 可以按照指定的字符集,将写出的字符转换为对应的字节 - * 字符流只适合读写文本数据 - * 转码 - *uft-8转gbk - */ - InputStreamReader isr = new InputStreamReader(fis, "utf-8"); - OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk"); - int leng; - while ((leng = isr.read()) != -1) { - osw.write(leng); - } - osw.close(); - isr.close(); - - /** - * 缓冲字符输入流,特点:读取速度快,并且可以按行读取字符串 - */ - BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("fis.txt"))); - String line = null; - //readerLIne():连续读取若干字符,知道遇到换行符为止,该字符串中不包含换行符 - while ((line = br.readLine()) != null) { - //TODO - } - br.close(); - - /** - * 缓冲字符输出流 - */ - PrintWriter pw = new PrintWriter("e.txt", "utf-8");//PrintWriter可以直接创建基于文件进行写操作 - - FileOutputStream fos1 = new FileOutputStream("pw1.txt"); - OutputStreamWriter osw1 = new OutputStreamWriter(fos, "utf-8");//可以指定字符 - PrintWriter pw1 = new PrintWriter(osw, true);///////当第一个参数为流,可以使用第二个参数来指定是否自动flush - pw1.println("......"); - pw1.close(); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/Java8DateDemo.java b/boot-service/src/main/java/com/xwbing/demo/Java8DateDemo.java deleted file mode 100644 index d39e022..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/Java8DateDemo.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.xwbing.demo; - -import java.time.Clock; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.Month; -import java.time.MonthDay; -import java.time.Year; -import java.time.YearMonth; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.Date; - -/** - * 说明: - * 项目名称: zxwbing - * 创建日期: 2017年3月29日 下午4:37:09 - * 作者: xiangwb - */ - -public class Java8DateDemo { - public static void main(String[] args) { - DateTimeFormatter formatted = DateTimeFormatter.ofPattern("YYYY-MM-dd"); - LocalDate date = LocalDate.now();// Current Date - String dstr = date.format(formatted);// 格式化 - date = LocalDate.parse(dstr, formatted);// 解析 - LocalDate firstDay2017 = LocalDate.of(2017, 1, 1);// 2017-01-01 - LocalDate hundredDay2017 = LocalDate.ofYearDay(2017, 100);// 2017-03-29 - System.out.println(firstDay2017.equals(hundredDay2017));// 比较时间是否相等 - LocalDate todayKolkata = LocalDate.now(ZoneId.of("Asia/Kolkata")); - int year = date.getYear();// 获取年 - int month = date.getMonthValue(); // 获取月 - int day = date.getDayOfMonth(); // 获取日 - date.isLeapYear();// 是否为闰年 - LocalDate dateOfBirth = LocalDate.of(2010, 05, 11); - MonthDay monthDay = MonthDay.now(); - MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), - dateOfBirth.getDayOfMonth());// 月日 - YearMonth yearMonth = YearMonth.of(2018, 8);// 年月 - Year yearr = Year.now(); - LocalDate nextYear = date.plusYears(1); // 1年后日期,可以一个月,一年,一小时,一分钟 - LocalDate beforYear = date.minusYears(1);// 1年前日期,可以一个月,一年,一小时,一分钟 - System.out.println(nextYear.isBefore(beforYear)); // 判断某个日期是在另一个日期的前面还是后面 - - LocalTime time = LocalTime.now();// Current Time - LocalTime specificTime = LocalTime.of(12, 0, 0);// 12:20:25 - LocalTime newSpecificTime = specificTime.plusHours(2);// 增加2小时 - LocalTime timeKolkata = LocalTime.now(ZoneId.of("Asia/Kolkata")); - LocalTime specificSecondTime = LocalTime.ofSecondOfDay(1);// 00:00:01 - - LocalDateTime dateTime = date.atTime(time);// Create LocalDateTime from - // LocalDate - LocalDateTime today = LocalDateTime.now();// Current Date - today = LocalDateTime.of(LocalDate.now(), LocalTime.now()); - LocalDateTime specificDate = LocalDateTime.of(2014, Month.JANUARY, 1, - 10, 10, 30);// 2014-01-01T10:10:30 - LocalDateTime todayKolkata1 = LocalDateTime.now(ZoneId - .of("Asia/Kolkata")); - int second=today.getSecond();//获取时间中的秒 - int week=today.getDayOfWeek().getValue();//获取周几 - - /* - * 时钟 - */ - Clock clock = Clock.systemUTC(); - System.out.println(clock.millis());// 当前毫秒数 - Instant in = clock.instant(); - LocalDate d = LocalDate.now(clock); - Instant timestamp = Instant.now();// 类似于java.util.Date - /* - *新旧日期转换 - */ - Instant instant = new Date().toInstant(); - Date dateee = Date.from(instant); - - /* - * 时间相差 - */ - LocalDateTime be = LocalDateTime.of(2016, 2, 11, 10, 30); - LocalDateTime af = LocalDateTime.of(2016, 3, 11, 10, 30); - Duration duration = Duration.between(be, af); - System.out.println(duration.toDays() + duration.toHours()); - } -} \ No newline at end of file diff --git a/boot-service/src/main/java/com/xwbing/demo/JsonDemo.java b/boot-service/src/main/java/com/xwbing/demo/JsonDemo.java deleted file mode 100644 index 550862f..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/JsonDemo.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.xwbing.demo; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.annotation.JSONField; -import com.google.gson.*; -import com.google.gson.annotations.Expose; -import com.google.gson.annotations.SerializedName; -import com.xwbing.domain.entity.sys.BaseEntity; -import com.xwbing.domain.entity.sys.SysUser; -import com.xwbing.util.RestMessage; -import lombok.Data; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 创建日期: 2017年3月18日 下午1:34:05 - * 作者: xiangwb - */ -@Data -public class JsonDemo { - /* - * fastJson注解 - */ - @JSONField(serialize = false) - private String name; - @JSONField(name = "nick_name") - private String nickName; - /* - * gson注解 - */ - @SerializedName("user_age") - @Expose //可以序列化和反序列化 - private String userAge; - @Expose(serialize = false)//临时字段,可以反序列化 - private String addr; - @Expose - private String email; - - public static void main(String[] args) { - /** - * fastJson - */ - String jsonStr = "{'id':'888888','resultMessage':{'msg':'200','isSuccess':'true'}}"; - Map map = new HashMap<>(); - map.put("id", "99999"); - List list = new ArrayList<>(); - /* - * to jsonObject - */ - JSONObject jsonObject = new JSONObject(map);// map转JSONObject - jsonObject = JSONObject.parseObject(jsonStr);// json字符串转JSONObject - /* - * to javaObject - */ - BaseEntity entiry = JSONObject.toJavaObject(jsonObject, - BaseEntity.class);//jsonObject转javaObject - entiry = JSONObject.parseObject(jsonStr, BaseEntity.class);// json字符串转javaObject - /* - * JSONArray <--> list - */ - String arrayStr = JSONArray.toJSONString(list); - list = JSONArray.parseArray(arrayStr, SysUser.class); - /* - * to object - */ - Object obj = JSONObject.toJSON(entiry);// javabean转object - /* - * to jsonStr - */ - jsonStr = JSONObject.toJSONString(entiry); - /* - * 获取jsonObject属性 - */ - String id = jsonObject.getString("id"); - RestMessage result = JSONObject.toJavaObject( - jsonObject.getJSONObject("resultMessage"), RestMessage.class); - - /** - * gson - */ - Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create();//不导出实体中没有用@Expose注解的属性,并把null值也转换 - JsonDemo jsonDemo = new JsonDemo(); - jsonDemo.setUserAge("18"); - jsonDemo.setAddr("西溪湿地"); - String serialize = gson.toJson(jsonDemo); - String s = new Gson().toJson(jsonDemo); - JsonDemo deserialize = gson.fromJson(s, JsonDemo.class); - - - String gsonStr = "{'name':'John', 'sex':1,'role':{'id':'33'}}"; - /* - * jsonStr to JsonElement - */ - JsonElement jsonElement = new JsonParser().parse(gsonStr); - /* - * jsonStr to javaObject - */ - SysUser user = new Gson().fromJson(gsonStr, SysUser.class); - /* - * JsonElement to javaObject - */ - user = new Gson().fromJson(jsonElement, SysUser.class); - /* - * javaObject to jsonStr - */ - gsonStr = new Gson().toJson(user); - /* - * 获取属性 - */ - JsonObject gsonObject = jsonElement.getAsJsonObject(); - JsonElement role = jsonElement.getAsJsonObject().get("role"); - String name = jsonElement.getAsJsonObject().get("name").getAsString(); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java b/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java deleted file mode 100644 index f0299b3..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.xwbing.demo; - -import com.alibaba.fastjson.JSONObject; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import javax.annotation.Resource; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -/** - * Date: 2017/6/15 17:09 - * Author: xiangwb - * 说明: 数据量大或者每个元素涉及到复杂操作的用parallelStream reduce/collect会并行化处理结果 - */ -public class LambdaDemo { - @Resource - private ThreadPoolTaskExecutor taskExecutor; - - public static void main(String[] args) { - //匿名内部类 - Thread t = new Thread(() -> System.out.println("hello,lambda")); - t.start(); - List list = Arrays.asList("a", "b", "c"); - list.sort(Comparator.naturalOrder()); - /** - * stream api 高级版本的迭代器 - */ - List lists = Arrays.asList(1, 2, 4, 2, 3, 5, 5, 6, 8, 9, 7, 10); -// //遍历 -// Arrays.stream(arrays).forEach(System.out::println); - list.forEach(System.out::println);//遍历时:对象,json等引用类型可直接转换 - lists.sort(Comparator.comparingInt(o -> o));//升序排序,不需要收集 - System.out.println("sort:" + lists.stream().sorted((o1, o2) -> o2 - o1).collect(Collectors.toList()));//排序 - System.out.println("map:" + lists.stream().map(o1 -> o1 * 2).collect(Collectors.toList()));//转换成新元素 - System.out.println("peak:" + lists.stream().peek(String::valueOf).collect(Collectors.toList()));//生成一个包含原Stream元素的新Stream - System.out.println("distinct:" + lists.stream().distinct().collect(Collectors.toList()));//去重(去重逻辑依赖元素的equals方法) - System.out.println("limit:" + lists.stream().limit(4).collect(Collectors.toList()));//截取 - System.out.println("skip:" + lists.stream().skip(4).collect(Collectors.toList()));//丢弃 - //匹配 - boolean b1 = lists.stream().anyMatch(o -> o == 1); - boolean b = lists.stream().allMatch(o -> o == 1); - boolean b2 = lists.stream().noneMatch(o -> o == 1); - //过滤 - System.out.println("filter:" + lists.stream().filter(o1 -> o1 > 3 && o1 < 8).collect(Collectors.toList())); - Predicate gt = integer -> integer > 3;//函数式接口Predicate - Predicate lt = integer -> integer < 8; - System.out.println("重用filter:" + lists.stream().filter(gt.and(lt)).collect(Collectors.toList())); - //删除 - lists.removeIf(item -> item > 3);//根据条件删除,不用收集 - //聚合(最好给默认值,不然如果list为空时,聚合计算时会报错) - System.out.println("reduce:" + lists.stream().reduce((o1, o2) -> o1 + o2).get());//聚合 - System.out.println("reduce:" + lists.stream().reduce(0, (o1, o2) -> o1 + o2));//聚合(给定默认值) - System.out.println("ids:" + list.stream().reduce((sum, item) -> sum + "," + item).get());//list(a,b,c)-->,a,b,c - System.out.println("ids:" + list.stream().reduce("", (sum, item) -> sum + "," + item).substring(1));//list(a,b,c)-->,a,b,c-->a,b,c - String s = list.stream().reduce("", (sum, item) -> sum + "'" + item + "',");//list(a,b,c)-->'a','b','c',-->'a','b','c' - System.out.println("id in:" + s.substring(0, s.lastIndexOf(","))); - //join - System.out.println("join:" + list.stream().collect(Collectors.joining(",")));//list(a,b,c)-->a,b,c - System.out.println("join:" + String.join(",", list)); - //统计 - IntSummaryStatistics statistics = lists.stream().mapToInt(x -> x).summaryStatistics(); - System.out.println("List中最大的数字 : " + statistics.getMax()); - System.out.println("List中最小的数字 : " + statistics.getMin()); - System.out.println("所有数字的总和 : " + statistics.getSum()); - System.out.println("所有数字的平均值 : " + statistics.getAverage()); - System.out.println("List成员个数 : " + statistics.getCount()); - //all example - System.out.println("all:" + lists.stream().filter(Objects::nonNull).distinct().mapToInt(num -> num * 2).skip(2).limit(4).sum()); - //遍历list存入map里 - Map userMap = listAll().stream().collect(Collectors.toMap(SysUser::getId, Function.identity())); - Map nameMap = listAll().stream().collect(Collectors.toMap(SysUser::getId, SysUser::getName)); - Map jsonMap = getList().stream().collect(Collectors.toMap(o1 -> o1.getString(""), o2 -> o2.getString(""))); - //分组 - Map> groupMap = listAll().stream().collect(Collectors.groupingBy(SysUser::getSex));//(分组条件为key,分组成员为value) - //非空判断 - Optional optional = list.stream().reduce((sum, item) -> sum + "," + item); - String reduce; - if (optional.isPresent()) { - reduce = optional.get(); - } - //异步回调 - List sysUsers = CompletableFuture.supplyAsync(LambdaDemo::getList).join();//线程等待,效果等同于get(),会拋出CompletionException - } - - /** - * 遍历集合,集合里数据还要进行复杂操作,导致速度很慢,用以下操作 - */ - public List supplyAsync() { - List list = new ArrayList<>(); - for (int i = 0; i < 100; i++) { - list.add(i); - } - int size = list.size(); - CompletableFuture[] futures = new CompletableFuture[size]; - List finalList = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - finalList.add(null);//在异步之前size+1,必须有这步,否则会下标越界 - Integer integer = list.get(i); - final int pos = i; - futures[i] = CompletableFuture.supplyAsync(() -> finalList.set(pos, integer), taskExecutor);//按原来顺序存 - } - CompletableFuture.allOf(futures).join();//线程等待,效果等同于get(),会拋出CompletionException -// CompletableFuture completableFuture = CompletableFuture.allOf(futures); -// try { -// completableFuture.get(); -// } catch (InterruptedException | ExecutionException e) { -// logger.error(e.getMessage()); -// throw new BusinessException("获取数据出错"); -// } - return finalList; - } - - /** - * filter - * - * @return - */ - public List getRoleUsers() { - if (1 == 1) {//分两步 - Predicate roles = sysUser -> { - String admin = isAdmin(sysUser.getId()); - return "Y".equals(admin); - }; - return listAll().stream().filter(roles).collect(Collectors.toList()); - } else {//一步到底 - return listAll().stream().filter(sysUser -> { - String admin = isAdmin(sysUser.getId()); - return "Y".equals(admin); - }).collect(Collectors.toList()); - } - } - - /** - * 假接口假数据----------------------------------------------------------------------------------------------------- - */ - - private static List getList() { - return Collections.EMPTY_LIST; - } - - private static List listAll() { - return Collections.EMPTY_LIST; - } - - private String isAdmin(String id) { - return "Y"; - } - - private class SysUser { - private String name; - private String sex; - private String id; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getSex() { - return sex; - } - - public void setSex(String sex) { - this.sex = sex; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - } - -} diff --git a/boot-service/src/main/java/com/xwbing/demo/RecursiveFIle.java b/boot-service/src/main/java/com/xwbing/demo/RecursiveFIle.java deleted file mode 100644 index 2a275d3..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/RecursiveFIle.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xwbing.demo; - -import java.io.File; - -/** - * 删除一个含有子项的目录 - * - * @author xiangwb - * - */ -public class RecursiveFIle { - public static void main(String[] args) { - File dir = new File("C:\\Users\\admin\\Desktop\\123"); - deleteFile(dir); - } - /* - * 将给定的file表示的文件或目录删除 - */ - public static void deleteFile(File f) { - if(f.isDirectory()){ - //将该目录下的所有子项删除 - File[] subs=f.listFiles(); - for(File sub:subs){ - deleteFile(sub); - } - } - f.delete(); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/ReentrantLockDemo.java b/boot-service/src/main/java/com/xwbing/demo/ReentrantLockDemo.java deleted file mode 100644 index 379cc6a..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/ReentrantLockDemo.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.xwbing.demo; - -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2018/2/27 17:32 - * 作者: xiangwb - * --------------------------------------------------- - * 区别: - * (1) Lock是一个接口,是JDK层面的实现;而synchronized是Java中的关键字,是Java的内置特性,是JVM层面的实现; - * (2) synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁; - * (3) Lock 可以让等待锁的线程响应中断,而使用synchronized时,等待的线程会一直等待下去,不能够响应中断; - * (4) 通过Lock可以知道有没有成功获取锁,而synchronized却无法办到; - * (5) Lock可以提高多个线程进行读操作的效率:ReentrantReadWriteLock,readLock()和writeLock()用来获取读锁和写锁; - * 在性能上来说,如果竞争资源不激烈,两者的性能是差不多的。而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。 - */ -public class ReentrantLockDemo { - // 注意这个地方:lock被声明为成员变量 - private final Lock lock = new ReentrantLock(); - - public void lock() { - lock.lock(); - try { - //处理任务 - } catch (Exception ex) { - //处理异常 - } finally { - System.out.println("释放了锁..."); - lock.unlock();//释放锁 - } - } - - public void tryLock() { - if (lock.tryLock()) { - try { - System.out.println("得到了锁..."); - //处理任务 - } catch (Exception e) { - //处理异常 - } finally { - System.out.println("释放了锁..."); - lock.unlock(); - } - } else { - System.out.println("获取锁失败..."); - } - } - - public void tryLockTime() { - try { - if (lock.tryLock(4, TimeUnit.SECONDS)) {//4秒 - try { - System.out.println("得到了锁..."); - //处理任务 - } catch (Exception e) { - //处理异常 - } finally { - System.out.println("释放了锁..."); - lock.unlock(); - } - } else { - System.out.println("放弃了对锁的获取..."); - } - } catch (InterruptedException e) { - System.out.println("被中断..."); - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/StringDemo.java b/boot-service/src/main/java/com/xwbing/demo/StringDemo.java deleted file mode 100644 index c2a77b8..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/StringDemo.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.xwbing.demo; - -import java.text.DecimalFormat; -import java.text.MessageFormat; -import java.util.Scanner; - -/** - * 创建日期: 2017年2月16日 下午5:27:23 - * 作者: xiangwb - */ - -public class StringDemo { - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("请输入:"); - String strr = sc.next(); - System.out.println(strr); - - /** - * 基本语法 - */ - String str = "thinking in java"; - str.trim();// 去除当前字符两边的空格 - str.toUpperCase();// 转换为全大写 - str.toLowerCase();// 转换为全小写 - boolean contains = str.contains("ss");//判断是否包含某字符 - int index = str.indexOf("in");// 查找in在str字符串中的位置,若没有返回-1 - index = str.indexOf("in", 3);// 从指定位置处开始查找 - index = str.lastIndexOf("in");// 最后一次出现位置 - char c = str.charAt(5);// 获取当前字符串指定下标对应的位置 - boolean starts = str.startsWith("thi");// 判断当前字符串是否是以指定的字符串开始 - boolean ends = str.endsWith("ava");// 判断当前字符串是否是以指定的字符串结尾 - String sub = str.substring(5, 9);// 子集,含头不含尾 - sub = str.substring(1);// 指定位置到末尾 - System.out.println(sub); - - /** - * 正则表达式:匹配 - */ - String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-z]+)+"; - String mail = "fancq@tedu.cn.cn"; - boolean flag = mail.matches(regex); - if (flag) { - System.out.println("是邮箱"); - } else { - System.out.println("不是邮箱"); - } - - /** - * 正则表达式:分割 - */ - String imagName = "1.jpg"; - String names[] = imagName.split("\\."); - imagName = System.currentTimeMillis() + "." + names[1]; - System.out.println(imagName); - - /** - * 正则表达式:替换 - */ - String imgName = "1.jpg"; - imgName = imgName.replaceAll(".+\\.", System.currentTimeMillis() + "."); - System.out.println(imgName); - - /** - * StringBuilder - */ - String sstr = "努力学习java"; - StringBuilder b = new StringBuilder(sstr); - b.append(",为了找好工作"); - System.out.println(b.toString()); - b.replace(9, 16, "就是为了改变世界"); - System.out.println(b.toString()); - b.delete(0, 9); - System.out.println(b.toString()); - b.insert(0, "活着,"); - System.out.println(b.toString()); - - /** - * 判断日期字符串大小 >0 =0 <0 - */ - int n = "2018-08-08 08:08:08".compareTo("2018-08-08 08:08:09"); - System.out.println(n >= 0); - - /** - * 格式化字符串 - */ - System.out.println(String.format("xwbing %s", "项伟兵")); - System.out.println(MessageFormat.format("xwbing {0}", "项伟兵")); - //努力拉到需要的位数 - System.out.println(new DecimalFormat("#####.###").format(11.23)); - //不够补0 - System.out.println(new DecimalFormat("0000.000").format(11.23)); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/ThreadDemo.java b/boot-service/src/main/java/com/xwbing/demo/ThreadDemo.java deleted file mode 100644 index 22c8b72..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/ThreadDemo.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.xwbing.demo; - - -import com.xwbing.util.DateUtil2; - -import java.util.Date; - -/** - * 创建日期: 2017年2月20日 上午11:32:55 - * 作者: xwb - */ - -public class ThreadDemo { - public static void main(String[] args) { - /** - * 直接继承thread并重写run方法,在其中定义当前线程要执行的任务 - * 缺点: - * 1:由于要求继承thread类,那么在将来项目中,就有可能出现继承冲突, - * 很多时候我们需要继承项目中的一个父类来复用方法,但是当前类又要继承thread作为线程去使用 java是单继承的,这里产生类冲突 - * 2:由于继承了thread后需要重写run方法来定义线程要执行的任务,这就导致线程与任务有一个强耦合关系 - * 当前线程就只能做run方法定义的任务,其他事情做不了,这不利于线程的重用 - */ - Thread t1 = new MyThread(); - t1.start();// 启动线程要调用start方法 - - /** - * 定义一个类并实现runable接口来单独定义线程要执行的任务 - */ - Runnable r1 = new MyRunnable(); - Thread t2 = new Thread(r1); - t2.start(); - - /** - * 使用匿名内部类实现两种创建线程的方式 - */ - // 方式一: - Thread thread1 = new Thread() { - public void run() { - // TUDO - } - }; - // 方式二: - Runnable runnable = new Runnable() { - public void run() { - Thread.yield();////模拟cpu时间片耗尽,线程发生切换 - } - }; - Thread thread2 = new Thread(runnable); - // 方式三:匿名对象方式(推荐) - Thread thread3 = new Thread(new Runnable() {// 使用sleep阻塞,实现电子表功能 - public void run() { - while (true) { - System.out.println(DateUtil2.dateToStr(new Date(),DateUtil2.YYYY_MM_DD_HH_MM_SS)); - try { - Thread.sleep(1000);// 线程进入n毫秒阻塞状态 - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - }); - - /** - * 获取线程相关信息的api - */ - Thread main = Thread.currentThread();// 获取的就是运行该方法的线程 - long id = main.getId();// 线程id - String name = main.getName();// 获取名字 - int priority = main.getPriority();// 查看优先级 - boolean isAlive = main.isAlive();// 是否还活着 - boolean isDaemon = main.isDaemon();// 是否为守护线程 - /** - * 设置线程优先级: 1最低,5为默认,10最高, - */ - thread1.setPriority(10); - thread3.setPriority(1); - thread1.start(); - thread2.start(); - thread3.start(); - - /** - * void setDaemon(boolean on) - * 后台线程,又叫做守护线程 当一个进程中的所有前台线程都结束了,进程就会结束 - * 无论进程中的其他后台线程是否还在运行,都要被强制中断。 - */ - Thread rose = new Thread() {// 前台线程 - public void run() { - } - }; - Thread jack = new Thread() {// 后台线程 - public void run() { - } - }; - // 设置为后台线程,需要在start前调用 - jack.setDaemon(true); - rose.start(); - jack.start(); - } -} - -/** - * void join() - * 线程提供了一个方法join,该方法允许一个线程在另一个线程上等待, 直到它的工作结束,才继续当前线程的后续工作 - * 否则一致处于阻塞状态 - */ -class Join { - public static void main(String[] args) { - final Thread t1 = new Thread() { - public void run() { - //一些耗时的操作 - } - }; - Thread t2 = new Thread() { - public void run() { - try { - t1.join();//这里t2线程会开始阻塞,直到t1线程的run方法执行完毕 - } catch (InterruptedException e) { - e.printStackTrace(); - } - //以下是当前线程的任务代码,只有t1线程运行完毕才会运行。 - } - }; - t1.start(); - t2.start(); - } -} - -class MyThread extends Thread { - public void run() {// run方法是线程要执行的任务 - // TUDO - } -} - -class MyRunnable implements Runnable { - public void run() { - // TUDO - } -} \ No newline at end of file diff --git a/boot-service/src/main/java/com/xwbing/demo/ThreadProducerConsumer.java b/boot-service/src/main/java/com/xwbing/demo/ThreadProducerConsumer.java deleted file mode 100644 index 2bef286..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/ThreadProducerConsumer.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.xwbing.demo; - -/** - * 创建日期: 2017年2月20日 下午4:03:56 - * 作者: xiangwb - */ - -public class ThreadProducerConsumer { - public static void main(String[] args) { - PublicResource resource = new PublicResource(); - new Thread(new ProducerThread(resource)).start(); - new Thread(new ConsumerThread(resource)).start(); - } -} - -/** - * 公共资源类 - */ -class PublicResource { - private int number = 9; - - /** - * 增加公共资源 - */ - public synchronized void increace() { - while (number != 0) { - try { - wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - number++; - System.out.println(number); - notifyAll(); - } - - /** - * 减少公共资源 - */ - public synchronized void decreace() { - while (number == 0) { - try { - wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - number--; - System.out.println(number); - notifyAll(); - } -} - -/** - * 生产者线程,负责生产公共资源 - */ -class ProducerThread implements Runnable { - private PublicResource resource; - - public ProducerThread(PublicResource resource) { - this.resource = resource; - } - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - try { - Thread.sleep((long) (Math.random() * 1000)); - } catch (InterruptedException e) { - e.printStackTrace(); - } - resource.increace(); - } - } -} - -/** - * 消费者线程,负责消费公共资源 - */ -class ConsumerThread implements Runnable { - private PublicResource resource; - - public ConsumerThread(PublicResource resource) { - this.resource = resource; - } - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - try { - Thread.sleep((long) (Math.random() * 1000)); - } catch (InterruptedException e) { - e.printStackTrace(); - } - resource.decreace(); - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/ThreadSyncDemo.java b/boot-service/src/main/java/com/xwbing/demo/ThreadSyncDemo.java deleted file mode 100644 index 06fa126..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/ThreadSyncDemo.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.xwbing.demo; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - - - -/** - * 说明: - * 多线程并发安全问题 - * 当多个线程访问同个资源时,由于线程切换的不确定性, - * 可能导致代码逻辑上的混乱,严重时可能导致系统崩溃 - * 项目名称: zdemo - * 创建日期: 2017年2月20日 下午2:34:05 - * 作者: xiangwb - */ - -public class ThreadSyncDemo { - public static void main(String[] args) { - /* - * 同步代码块 - */ - final Shop s=new Shop();//保证对象一致 - Thread t1=new Thread(){ - public void run(){ - s.buy(); - } - }; - Thread t2=new Thread(){ - public void run(){ - s.buy(); - } - }; - t1.start(); - t2.start(); - - - /* - * 静态方法锁 - */ - Thread tt1=new Thread(){ - public void run(){ - dosome(); - } - }; - Thread tt2=new Thread(){ - public void run(){ - dosome(); - } - }; - tt1.start(); - tt2.start(); - - /* - * 互斥 - */ - final Foo f=new Foo();//保证对象一致 - Thread ttt1=new Thread(){ - public void run(){ - f.methodA(); - } - }; - Thread ttt2=new Thread(){ - public void run(){ - f.methodB(); - } - }; - ttt1.start(); - ttt2.start(); - - /** - * arraylist,linkedlist,hashset都不是线程安全的 - * 线程安全的list集合有一个vector - * hashmap不是线程安全的,线程安全的是hashtable - * collections提供类相应的静态方法,可以将现有的集合或map转换为线程安全的 - */ - List list=new ArrayList(); - list.add("one"); - list.add("two"); - list=Collections.synchronizedList(list);//将现有的list集合转换为线程安全的集合 - Set set=new HashSet(list); - set=Collections.synchronizedSet(set); //转换为线程安全的set集合 - Map map=new HashMap(); - map.put("语文", 99); - map.put("数学", 95); - map.put("英语文", 58); - map=Collections.synchronizedMap(map);//转换为线程安全的map - - } - /* - * 静态方法锁: - * synchronized修饰静态方法肯定同步,因为静态方法只有一份。
- */ - public synchronized static void dosome(){ - Thread t=Thread.currentThread(); - System.out.println(t+"正在执行dosome"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println(t+"执行dosome完毕"); - - } -} -class Shop{ - public void buy(){ - Thread t=Thread.currentThread(); - try { - System.out.println(t+"买"); - Thread.sleep(5000); - /* - * 同步代码块: - * 同步块需要指定同步监视器(上锁对象) - * 若希望该同步块有效,必须保证多个线程看到的锁对象相同 - * 通常使用this即可 - */ - synchronized (this) { - System.out.println(t+"试"); - Thread.sleep(5000); - } - System.out.println(t+"over"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} -class Foo{ - /* - * 互斥锁 - * synchronized修饰的是两段代码,但是锁对象相同 - * 那么这两端代码就是互斥的 - */ - public synchronized void methodA(){ - Thread t=Thread.currentThread(); - System.out.println(t+"开始执行a"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println(t+"a结束"); - } - public synchronized void methodB(){ - Thread t=Thread.currentThread(); - System.out.println(t+"开始执行B"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println(t+"B结束"); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/XmlDemo.java b/boot-service/src/main/java/com/xwbing/demo/XmlDemo.java deleted file mode 100644 index d8264b6..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/XmlDemo.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.xwbing.demo; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.util.List; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.SAXReader; -import org.dom4j.io.XMLWriter; - -/** - * 创建日期: 2017年2月16日 下午1:23:16 - * 作者: xiangwb - */ - -public class XmlDemo { - - /** - * - * 功能描述:将doc对象(xml)写到文件中
- * 作 者:xwb
- * 创建时间:2017年2月16日 下午2:59:26
- * - * @param doc - * @param xml - * @throws Exception - */ - private static void write2xml(Document doc, String fos) throws Exception { - FileOutputStream out = new FileOutputStream(fos); - // dom4j 提供类格式工具,可以输出时候对doc进行化妆,搞漂亮一些 - OutputFormat fmt = OutputFormat.createPrettyPrint(); - XMLWriter writer = new XMLWriter(out, fmt);// 格式 - writer.write(doc); - writer.close(); - } - - /** - * - * 功能描述: 读取XML文件到doc对象
- * 作 者:xwb
- * 创建时间:2017年2月16日 下午3:01:33
- * - * @return - * @throws Exception - */ - private static Document readXml(String fis) throws Exception { - SAXReader reader = new SAXReader(); - FileInputStream in = new FileInputStream(fis); - Document doc = reader.read(in); - return doc; - } - - public static void main(String[] args) throws Exception { - Document doc = readXml("xmlDemo.xml"); - System.out.println(doc.asXML() + "..............."); - - // doc 是全部的XML文件的内容 - // doc 引用的是内存中的对象。 - Element root = doc.getRootElement();// 获取xml的根元素,访问xml中数据的唯一入口 - // 获取根元素下所有子元素,并遍历 - List list = root.elements(); - for (Element e2 : list) { - System.out.println(e2.getName());// 获取元素名字 - System.out.println(e2.getText());// 获取元素内文本内容 - } - - Element book = root.element("book");// 获取满足第一个条件的子元素 - Element name = book.element("name"); - name.setText("轶名名");// 修改元素内容 - Attribute id = book.attribute("id");// 获取属性 - System.out.println(id.getValue()); - id.setValue("b3");// 修改属性 - - // 如果修改了doc 就能实现修改xml并写文件 - // 为根元素添加子元素 - Element newOne = root.addElement("book8"); - newOne.addElement("name").setText("18岁给我一姑娘"); - newOne.addAttribute("id", "b5"); - newOne.addAttribute("lang", "中文"); - - // 找到元素并且删除这个子元素 - Element book1 = root.element("book8"); - root.remove(book1); - write2xml(doc, "demo.xml"); - - // 创建新的xml document对象 - Document newDoc = DocumentHelper.createDocument(); - // 为doc添加根元素 - Element newRoot = newDoc.addElement("students"); - newRoot.addElement("stu1"); - newRoot.addElement("stu2"); - write2xml(newDoc, "xmlDemoStu.xml"); - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/chat/Client.java b/boot-service/src/main/java/com/xwbing/demo/chat/Client.java deleted file mode 100644 index bfa24b3..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/chat/Client.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.xwbing.demo.chat; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.net.Socket; -import java.util.Scanner; - -/** - * 聊天室客户端 - * tcp通讯的客户端 - * - * @author xiangwb - */ -public class Client { - /* - * socket 套接字 封装了tcp协议 - */ - private Socket socket; - - /* - * 构造方法,用于初始化客户端,若初始化过程出现错误会抛出异常 - */ - public Client() throws Exception { - try { - /* - * 初始化socket需要传入两个参数: 1:远程计算机的ip地址 2:服务端应用程序在服务器上申请的端口 - * 我们是通过ip地址找到服务器的计算机,在通过端口找到该机器上的服务端应用 程序,这个端口不是客户端决定的,而是服务端决定的 - * - * 实例化socket的过程就是连接的过程 若服务端没有响应,这里会抛出异常 - */ - socket = new Socket("localhost", 7851); - } catch (Exception e) { - throw e; - } - } - - public void start() { - try { - // 启动用于接收服务端发送消息的线程 - ServerHandler handler = new ServerHandler(); - Thread t = new Thread(handler); - t.start(); - /* - * outputstream getoutputstream() 通过socket获取输出流,用来将数据发送至服务端 - */ - Scanner sc = new Scanner(System.in); - OutputStream out = socket.getOutputStream(); - OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8"); - PrintWriter pw = new PrintWriter(osw, true); - - while (true) { - String say = sc.nextLine(); - pw.println(say); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void main(String[] args) { - try { - Client client = new Client(); - client.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 该线程任务是用来接收服务端发送过来的消息并输出到客户端的控制台上 - */ - class ServerHandler implements Runnable { - public void run() { - try { - BufferedReader br = new BufferedReader(new InputStreamReader( - socket.getInputStream(), "utf-8")); - String message = null; - while ((message = br.readLine()) != null) { - System.out.println(message); - } - } catch (Exception e) { - // TODO: handle exception - } - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/chat/Server.java b/boot-service/src/main/java/com/xwbing/demo/chat/Server.java deleted file mode 100644 index 0a60075..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/chat/Server.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.xwbing.demo.chat; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.net.InetAddress; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.ArrayList; -import java.util.List; - -/** - * 聊天室服户端 - * 服务器上的应用程序 - * tcp通讯的服户端 - * - * @author xiangwb - */ -public class Server { - /* - * servarsocket是运行在服务端的scoket - * 它的作用: - * 1:申请服务端口,客户端就是通过该端口连接到服务端的 - * 2:监听申请的服务端口,一旦客户端连接后,就创建一个socket实例与该客户端交互 - */ - private ServerSocket server; - private List allOut; - - /** - * 构造方法,用来初始化服务端 - */ - public Server() throws Exception { - try { - /* - * 初始化serversocket并指定服务端口 - * 该端口不能与其他应用程序冲突,否则会抛出异常 - */ - server = new ServerSocket(7851); - allOut = new ArrayList<>(); - } catch (Exception e) { - throw e; - } - } - - /** - * 向共享集合中添加给定的客户端的输出流 - * - * @param out - */ - private synchronized void addOut(PrintWriter out) { - allOut.add(out); - } - - /** - * 向给定的客户端的输出流从共享集合中删除 - * - * @param out - */ - private synchronized void removeOut(PrintWriter out) { - allOut.remove(out); - } - - /** - * 将给定的消息发送给所有的客户端 - * - * @param message - */ - private synchronized void sendMessage(String message) { - for (PrintWriter out : allOut) { - out.println(message); - } - } - - /** - * 服务端开始工作的方法 - */ - public void start() { - try { - /* - * scoket accept() - * serversocket提供了accept方法,该方法用于监听申请的服务端口,直到一个客户端连接 - * 然后返回一个socket实例用于与该客户端通讯 - * 这个方法是一个阻塞方法,直到客户端连接返回继续向下执行 - */ - while (true) { - System.out.println("等待客户端连接"); - Socket socket = server.accept(); - System.out.println("一个客户端连接了!"); - ClientHandler handler = new ClientHandler(socket); - Thread t = new Thread(handler); - t.start(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void main(String[] args) { - try { - Server server = new Server(); - server.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 该线程的任务是负责与指定的客户端进行交互 - * - * @author soft01 - */ - class ClientHandler implements Runnable { - /* - * 当前线程通过socket与指定客户端交互 - */ - private Socket socket; - //客户端地址信息 - private String host; - - public ClientHandler(Socket socket) { - this.socket = socket; - /* - * 通过socket可以获取远程计算机地址信息 - * 对于服务端这边而言,远程计算机即客户端 - */ - InetAddress address = socket.getInetAddress(); - // 获取ip地址的字符串形式 - host = address.getHostAddress(); - } - - public void run() { - PrintWriter pw = null; - try { - //通知所有客户该客户端上线了 - sendMessage("[" + host + "]" + "上线了!"); - /* - * 通过Socket获取输出流,用于将消息发送 - * 给客户端 - */ - OutputStream out = socket.getOutputStream(); - OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8"); - pw = new PrintWriter(osw, true); - //将该客户端的输出流存入共享集合 - addOut(pw); - /* - * inputstream getinputstream() - * socket提供的该方法用来获取一个输入流 - * 通过该输入流可以读取远端计算机发送过来的数据 - */ - InputStream in = socket.getInputStream(); - InputStreamReader isr = new InputStreamReader(in, "utf-8"); - BufferedReader br = new BufferedReader(isr); - //读取客户端发送过来的消息 - String message; - /* - * 服务端接受客户端发送过来的消息时,由于客户端操作系统不同, - * 那么当客户端断开连接时的效果也不相同, - * 当windows的客户端断开连接后,br.readline方法会抛出异常 - * 当linux的客户端断开连接后,br.readline会返回null - */ - while ((message = br.readLine()) != null) { -// System.out.println(host+"说:"+message); -// pw.println(host+"说:"+message); - sendMessage(host + "说:" + message); - } - } catch (Exception e) { - } finally { - /* - * 客户端与服务端断开后 - */ - try { - //将该客户端的输出流从共享集合中删除 - removeOut(pw); - //下线 - sendMessage("[" + host + "]" + "下线了!"); - /* - * 通讯完毕后,应当socekt关闭,以释放底层资源 - */ - socket.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/demo/oracle/day01.sql b/boot-service/src/main/java/com/xwbing/demo/oracle/day01.sql deleted file mode 100644 index 32f7d24..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/oracle/day01.sql +++ /dev/null @@ -1,138 +0,0 @@ -CREATE TABLE employee_xwbin( - id NUMBER(4) DEFAULT 1 , - name VARCHAR2(20), - gender CHAR(1) DEFAULT 'M', - biith DATE, - salary NUMBER(6,2), - job VARCHAR2(30), - deptno NUMBER(2) -); -DROP TABLE name4; -NOT NULL 约束可以确保指定的字段不允许为null -CREATE TABLE employ_xwbing( - id NUMBER(4) DEFAULT 1, - name VARCHAR2(20) NOT NULL, - gender CHAR(1) DEFAULT 'M', - birth DATE, - salary NUMBER(6,2) DEFAULT 1, - job VARCHAR2(30) DEFAULT 'M', - deptno NUMBER(2) DEFAULT 1 -) -DESC xwbing; -RENAME employ_xwbing TO xwbing; -DESC xwbing; -修改表的 -向表中添加新的字段,只能在当前表的末尾追加,可以同时追加多个列,只需要使用逗号隔开即可,与创建声明列的时候语法一样 -ALTER TABLE XWBING ADD( - HIREDATE DATE DEFAULT SYSDATE -) -删除表中现有字段 - - -DML -用于修改表中数据,分为:增 删 改 -插入数据 -INSERT INTO XWBING (id,name,job,salary) -VALUES(1,'JACK','CLERK',5000) -COMMIT -插入日期类型,建议使用TO-DATE函数 -可以使用字符串 但是格式必须是'DD-MON-RR' -由于有语言差异,不推荐 -INSERT INTO XWBING(id,name,job,birth) -VALUES(2,'ROSE','CLERK',TO_DATE('1992-08-02','YYYY-MM-DD')) -SELECT *FROM XWBING; - -ALTER TABLE XWBING DROP(HIREDATE) - -修改表中现有字段 -可以修改字段的类型,长度,默认值,非空 -ALTER TABLE XWBING MODIFY( - job VARCHAR2(40) DEFAULT 'CLERK' -) - -修改表中现有数据 -将rose的工资改为5500 -UPDATE XWBING SET SALARY=50000 WHERE name='ROSE' 字符串里区分大小写,用'' - -修改表中的数据的时候,通常要使用WHERE下限定条件,这样只会将满足条件的记录进行修改, -若不在指定WHERE则是全表所有的数据都修改 - -删除表中数据 -将rose删除 -DELETE FROM EMP_XWBING WHERE name='ROSE' -DELETE FROM EMP_XWBING -删除表中数据同样要用WHERE添加过滤条件 否则就是清空表操作 - -CREATE TABLE emp_xwbing( - empno NUMBER(4,0), - ename VARCHAR2(10), - job VARCHAR2(9), - mgr NUMBER(4,0), - hiredate DATE, - sal NUMBER(7,2), - comm NUMBER(7,2), - deptno NUMBER(2,0) -) -SELECT *FROM EMP_XWBING; -DESC emp_xwbing; -CREATE TABLE dept_xwbing( - deptno NUMBER(2,0), - dname VARCHAR2(14 BYTE), - loc VARCHAR2(13 BYTE) -) - -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7369,'SMITH','CLERK',7902,TO_DATE('1980/12/17','YYYY-MM-DD'),800.00,20); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,comm,deptno) -VALUES(7499,'ALLEN','SALESMAN',7698,TO_DATE('1981/02/20','YYYY-MM-DD'),1600.00,300.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,comm,deptno) -VALUES(7521,'WARD','SALESMAN',7698,TO_DATE('1981/02/22','YYYY-MM-DD'),1250.00,500.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7566,'JONES','MANAGER',7839,TO_DATE('1980/4/2','YYYY-MM-DD'),2975.00,20); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,comm,deptno) -VALUES(7654,'MARTIN','SALESMAN',7698,TO_DATE('1981/9/28','YYYY-MM-DD'),1250.00,1400.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7698,'BLACK','MANAGER',7839,TO_DATE('1980/5/1','YYYY-MM-DD'),2850.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7782,'CLARK','MANAGER',7839,TO_DATE('1980/6/9','YYYY-MM-DD'),2450.00,10); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7788,'SCOTT','ANALYST',7566,TO_DATE('1987/4/19','YYYY-MM-DD'),3000.00,20); -INSERT INTO emp_xwbing(empno, ename,job,hiredate,sal,deptno) -VALUES(7839,'KING','PRESIDENT',TO_DATE('1981/11/17','YYYY-MM-DD'),5000.00,10); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,comm,deptno) -VALUES(7844,'TURNER','SALESMAN',7698,TO_DATE('1981/9/8','YYYY-MM-DD'),1500.00,0.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7876,'ADAMS','CLERK',7788,TO_DATE('1987/5/23','YYYY-MM-DD'),1100.00,20); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7900,'JAMES','CLERK',7698,TO_DATE('1981/12/3','YYYY-MM-DD'),9500.00,30); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7902,'FORD','ANALYST',7566,TO_DATE('1981/12/3','YYYY-MM-DD'),3000.00,20); -INSERT INTO emp_xwbing(empno, ename,job,mgr,hiredate,sal,deptno) -VALUES(7934,'MILLER','CLERK',7782,TO_DATE('1982/1/23','YYYY-MM-DD'),1300.00,10); - -INSERT INTO dept_xwbing(deptno,dname,loc) -VALUES(10,'ACCOUNTING','NEW YORK'); -INSERT INTO dept_xwbing(deptno,dname,loc) -VALUES(20,'RESEARCH','DALLAS'); -INSERT INTO dept_xwbing(deptno,dname,loc) -VALUES(30,'SALES','CHICAGO'); -INSERT INTO dept_xwbing(deptno,dname,loc) -VALUES(40,'OPERATIONS','BOSTON'); -select *from dept_xwbing; - - -create table name2 ( - deptno NUMBER(2,0), - dname VARCHAR2(14 BYTE), - loc VARCHAR2(13 BYTE) -); -INSERT INTO name2(deptno,dname,loc) -VALUES(10,'ACCOUNTING','NEW YORK'); -INSERT INTO name2(deptno,dname,loc) -VALUES(20,'RESEARCH','DALLAS'); -INSERT INTO name2(deptno,dname,loc) -VALUES(30,'SALES','CHICAGO'); - -SELECT *FROM name4; -alter table name2 modify(deptno NUMBER(4,0), - dname VARCHAR2(14 BYTE)) \ No newline at end of file diff --git a/boot-service/src/main/java/com/xwbing/demo/oracle/day02.sql b/boot-service/src/main/java/com/xwbing/demo/oracle/day02.sql deleted file mode 100644 index 51d485a..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/oracle/day02.sql +++ /dev/null @@ -1,173 +0,0 @@ -SELECT语句 -SELECT是用来查询数据的语句DQL -查询某张表中的所有字段的记录: -SELECT * FROM EMP_XWBING; -查看指定字段的值: -SELECT ename,sal,job FROM EMP_XWBING; - -DQL必须包含的部分是SELECT子句与FROM子句 -SELCET用来确定查询的字段,可以使用的有:表的字段,函数,表达式FROM子句来确定查询的表 - -SELECT中使用表达式 -查看每个员工的年薪 -SELECT ename,sal*12 FROM emp_xwbing; - - -字符串函数 -1:concat(p1,p2) 连接字符串 -SELECT concat(ename,sal) FROM emp_xwbing; -2:连接字符串简便方式:||,相当与java里的-+号,拼接作用 -SELECT ename||':'||sal FROM emp_xwbing; - -LENGTH(p)函数,获取字符串长度 -SELECT ename,LENGTH(ename) FROM emp_xwbing; - -UPPER,LOWER,INITCAP -将字符串转换为全大写,全小写,首字母大写 -dual:伪表,当查询的内容与任何一张表中的数据无关时,可以查询伪表 -SELECT UPPER('hello'),INITCAP('wo de') -FROM dual; - -TRIM,LTRIM,RTRIM去除字符串两边指定字符 -SELECT TRIM('E'FROM'EELRERE') FROM DUAL;去单 -SELECT LTRIM('DSFRRA','SD')FROM DUAL;随便 - -LPAD,RPAD补位函数,若补位小于原长度,一律从左往右截 -要求显示指定内容指定位数,若不足则补充若干指定字符以达到要显示的长度 -SELECT ENAME,rPAD(SAL,5,'$') FROM EMP_XWBING; - -SUBSTR 截取字符串 -截取给定字符串,从指定位置开始截取指定个字符,在数据库中,下标都是从1开始的!!! -SELECT SUBSTR('think in java',5,3) FROM dual; -SELECT SUBSTR('think in java',-4,3) FROM dual; - -INETR(char1,char2[,n[,m]]) -查找char2在char1中的位置 -n为从指定位置开始查找,可以不写, -m为第几次出现,可以不写 -n,m不写默认都是1 -SELECT INSTR('think in java','in')FROM dual; -SELECT INSTR('think in java','in',2,2)FROM dual; - -SELECT ENAME,SAL,DEPTNO FROM emp_xwbing WHERE LOWER(ENAME)='smith'; -SELECT ename,sal FROM emp_xwbing WHERE LENGTH(ename)=5; -SELECT ename,sal FROM emp_xwbing WHERE SUBSTR(ename,1,1)='A'; - - - - -数字函数 -ROUND(n,[,m])对n进行四舍五入,保留到小数点后m位 -m可以不写的,不写默认值为0 -m为0则保留到整数位,-1为10位数,以此类推 -SELECT ROUND(45.678,2) FROM DUAL; -SELECT ROUND(45.678) FROM DUAL; -SELECT ROUND(45.678,-1) FROM DUAL; - -TRUNC(N[,M])用于截取,用法跟ROUND一样,只是不四舍五入 -SELECT TRUNC(45.678,2) FROM DUAL; -SELECT TRUNC(45.678) FROM DUAL; -SELECT TRUNC(45.678,-1) FROM DUAL; - -MOD(m,n) 取余,返回m除以n后余数,n为0则直接返回m -SELECT ename,sal,mod(sal,1000) FROM emp_xwbing; - -CEIL(N)和 FLOOR(N)向上取整和向下取整 -SELECT CEIL(44.5) FROM DUAL; -SELECT FLOOR(44.5) FROM DUAL; - - - - -日期类型 -DATE:7个字节,保存世纪,年月日时分秒 -TIMESTAMP:时间戳,比DATE多4个字节,可以保存秒以下的精度,前7个字节与DATE一致 -关键字: -SYSDATE:对应一个内置函数,返回一个表示当前系统时间的DATE类型值 -DATE默认只显示'DD-MON-RR' -SYSTIMEATAMP:同样的,返回的是表示当前系统时间的时间戳类型的值 -SELECT sysdate FROM dual; -SELECT systimestamp FROM dual; - -TO_DATE函数 -按照给定的日期格式将字符串解析为DATE类型值 -SELECT TO_DATE('1992-9-1 23:22:11','yyyy-mm-dd hh24:mi:ss') FROM dual; -SELECT TO_DATE('1992年9月1日 23:22:11','yyyy"年"mm"月"dd"日" hh24:mi:ss') FROM dual; - -DATE是可以比较大小的,越晚的越大 -查看82年以后入职的员工? -SELECT ename,hiredate FROM emp_xwbing WHERE hiredate>to_date('1982-1-1','yyyy-mm-dd'); - -DATE之间可以做减法,差为相差的天数 -SELECT ename,sysdate-hiredate FROM emp_xwbing; -SELECT trunc(sysdate-to_date('1990-5-11','yyyy-mm-dd')) FROM dual; - -DATE可以和一个数字进行加减运算,相当与加减了指定的天数,返回值为对应的日期 -7天后是那天? -SELECT SYSDATE+7 FROM DUAL; - -TO_CHAR -常用于转换日期,可以将日期按照指定的日期格式转换为字符串 -SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -SELECT TO_DATE('1992-9-1 23:22:11','RR-mm-dd hh24:mi:ss') FROM dual; -SELECT TO_CHAR(TO_DATE('99-09-01','RR-MM-DD'),'YYYY-MM-DD') FROM DUAL; - -LAST_DAY(date) 该函数返回给定日期所在月的最后一天 -查看当月月底? -SELECT LAST_DAY(SYSDATE) FROM DUAL; -查看每个员工入职所在月月底? -SELECT ENAME,LAST_DAY(HIREDATE) FROM EMP_XWBING; - -ADD_MONTHS(date,i) 返回日期加上i个月后的日期值 -查看每个员工入职20周年的纪念日? -SELECT ENAME,ADD_MONTHS(HIREDATE,12*20) FROM EMP_XWBING; - -MONTHS_BETWEEN(DATE1,DATE2) 计算两个日期之间相差的月,计算方式是使用date1-date2的结果换算的 -查看每个员工入职几个月? -SELECT ENAME,TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)) FROM EMP_XWBING; - -NEXT_DAY(DATE,I) -返回给定日期之后一周内的周几,1代表星期天 -SELECT NEXT_DAY(SYSDATE,1) FROM DUAL; - -LEAST,GREATEST 求最大值和最小值, 这组函数的参数不限数量,两个以上即可 -SELECT LEAST(SYSDATE ,TO_DATE('2008-2-2','YYYY-MM-DD')) FROM DUAL; -查看82年以后入职员工的入职日期,若是82年以前的,则显示为:1982-01-01? -SELECT ENAME,GREATEST(HIREDATE,TO_DATE('1982-01-01','YYYY-MM-DD')) FROM EMP_XWBING; - -EXTRACT(date FROM datetime)提取指定日期指定时间分量的值 -SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; -查看81年入职的员工? -SELECT ENAME,HIREDATE FROM EMP_XWBING WHERE EXTRACT(YEAR FROM HIREDATE)=1981; - -CREATE TABLE STUDENT_XWBING(ID NUMBER(4),NAME CHAR(20),GENDER CHAR(1)); -INSERT INTO STUDENT_XWBING VALUES(1000,'李莫愁','f'); -insert into student_xwbing values(1001,'林平之',NULL); -insert into student_xwbing(id,name) values(1002,'张无忌'); -SELECT * FROM student_xwbing; -UPDATE student_xwbing SET gender='m' WHERE gender IS NULL; -UPDATE student_xwbing SET gender=NULL WHERE gender='m'; - - - - -NULL的运算 -NULL与字符串连接等于什么都没做 -NULL与数字运算结果还是NULL -查看每个员工的收入? -SELECT ENAME,SAL,COMM FROM EMP_XWBING; - -NVL(P1,P2) 若p1为NULL,函数返回p2. 若不为NULL,函数返回p1自身.所以该函数的作用是将NULL替代换为非NULL值 -查看员工总收入? -SELECT ENAME,NVL(sum(SAL),0) FROM EMP_XWBING; -SELECT ENAME,IFNULL(sum(SAL),0) FROM EMP_XWBING;//MYSQL---------------------------- - -NVL2(P1,P2,P3) 若p1不为NULL值为p2,p1为NULL值为p3 -查看每个员工的奖金情况? -SELECT ENAME,SAL,NVL2(BOUNS,'有奖金','无奖金') FROM EMP_XWBING; -//MYSQL---------------------------------------- -ISNULL(字段) true返回1 -IF(p1,p2,p3):如果p1是true,返回值为p2;否则返回值则为p3 -IF(ISNULL(p1),p2,p3) 若p1为null值为p2,p1不为null值为p3 -SELECT ENAME,SAL,IF(ISNULL(BOUNS),'无奖金','有奖金') FROM EMP_XWBING; - diff --git a/boot-service/src/main/java/com/xwbing/demo/oracle/day03.sql b/boot-service/src/main/java/com/xwbing/demo/oracle/day03.sql deleted file mode 100644 index 7628a80..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/oracle/day03.sql +++ /dev/null @@ -1,151 +0,0 @@ -SELECT 子句中 可以对字段加别名,别名前加空格或as,若希望别名区分大小写或者包含空格,可以使用双引号将别名括起来 -SELECT ENAME,SAL*12 SAL FROM EMP_XWBING; -SELECT ename,sal*12 AS "S al" FROM emp_xwbing; - - - -查询条件: -<>不等于 -SELECT ename,sal FROM emp_xwbing WHERE sal<2000; -SELECT * FROM emp_xwbing WHERE deptno<>10; -SELECT * FROM emp_xwbing WHERE hiredate1000 AND job='CLERK'; -SELECT * FROM emp_xwbing WHERE sal>1000 OR job='CLERK'; -SELECT * FROM emp_xwbing WHERE sal>1000 AND (job='CLERK' OR JOB='SALESMAN'); - -LIKE 模糊查询 -%:0到多个字符 -_:表示单个字符 -SELECT ename FROM emp_xwbing WHERE ename LIKE '_A%'; -SELECT ename FROM emp_xwbing WHERE ename LIKE '_L_E%'; -SELECT ENAME FROM EMP_XWBING WHERE ENAME LIKE '%E_'; - -IN(list), NOT IN(list) -判断是否在列表中,常用在子查询中 -SELECT * FROM EMP_XWBING WHERE JOB IN('CLERK','SALESMAN'); - -BETWEEN AND 之间 -SELECT sal FROM emp_xwbing WHERE sal BETWEEN 1500 AND 3000; - -IS NULL,IS NOT NULL -SELECT * FROM emp_xwbing WHERE comm IS NOT NULL AND sal>1300; - -ANY,ALL 需要配合> >= < <= 一个列表使用,常用于判断子查询的结果 -SELECT * FROM emp_xwbing WHERE sal>ALL(2800,3000,1800); - -DISTINCT 过滤重复,必须跟在SELECT后面.可以对多列去重,去重原则是这些列的组合没有重复 -SELECT DISTINCT job FROM emp_xwbing; -SELECT DISTINCT job,deptno FROM emp_xwbing; - - - -排序: -ORDER BY 子句,只能定义在SELECT语句中的最后一个子句上. -排序结果集,可以按照指定的字段进行升序或将序排列 -可以对多列进行排序,排序具有优先级,先按照第一个字段排序方式排序,当第一个字段有重复值时再按照第二个字段排序方式排序,以次类推 -若排序字段里含有NULL,NULL被视为最大值 -ASC:升序,可以不写,默认为升序 -DESC:降序 -SELECT ename ,sal FROM emp_xwbing ORDER BY sal; -SELECT ename ,sal,deptno FROM emp_xwbing ORDER BY deptno,sal DESC; -SELECT ename FROM emp_xwbing ORDER BY ename; -SELECT * FROM emp_xwbing ORDER BY decode(job,'doctor',1,'teacher',2,'student',3); -SELECT * FROM emp_xwbing ORDER BY field(字段名,'','');//MYSQL--------------------------------- - - - - - -聚合函数又称多行函数:用来统计结果的 -MAX,MIN 统计最大值,最小值 -查看最高工资? -SELECT MAX(sal),MIN(sal) FROM emp_xwbing; - -AVG,SUM 统计平均值与总和,无值为null -查看平均工资和工资总和 -SELECT trunc(AVG(sal)) avg,SUM(sal) sum FROM emp_xwbing; - -COUNT 统计的是记录条数,而不关注具体该字段的取值,无值为0 -统计表中记录数,常使用 COUNT(*) -查看公司员工人数? -SELECT COUNT (*) FROM emp_xwbing; - -所有聚合函数忽略NULL值 -SELECT AVG(nvl(comm,0)),SUM(comm) FROM emp_xwbing; - - - - -分组: -GROUP BY 子句 -GROUP BY 子句允许将结果集按照给定的字段值相同的记录看作一组,然后配合聚合函数对每组记录进行统计 -查看每个部门的最高工资? -SELECT MAX (sal),deptno FROM emp_xwbing GROUP BY deptno; -当SELECT中含有聚合函数时,凡不在聚合函数中的单独字段都必须出现在 GROUP BY 子句中 -查看每个职位的平均工资和工资总和? -SELECT AVG(sal), SUM(sal) FROM emp_xwbing GROUP BY job; -查看每个部门各有多少人? -SELECT COUNT(*),deptno FROM emp_xwbing GROUP BY deptno; - - -查看每个部门的平均工资,前提是该部门平均工资高于2000? -WHERE中不允许使用聚合函数作为过滤条件,原因在于过滤时机不同.WHERE的过滤时机是在第一次从表中检索数据是添加过滤条件,用来确定那些数据可以被查出来,以确定结果集 -HAVING子句:HAVING必须跟在 GROUP BY 子句之后,可以使用聚合函数作为过滤条件.使之可以对分组进行过滤,将满足条件的分组保留,不满足的去掉 -SELECT AVG(sal),deptno FROM emp_xwbing GROUP BY deptno HAVING AVG(sal)>2000; - - - - - -关联查询: -查询的结果集中字段来自多张表,联合多张表查询数据就是关联查询,在关联查询中需要在过滤条件中添加两张表中记录之间对应关系,这样的条件称为连接条件 -n张表联合查询至少要有n-1个连接条件,不添加连接条件会产生迪卡尔积,除特殊情况下,该结果集通常是无意义的,并且由于数据量大,对系统资源消耗非常大. -查看每个员工的名字以及所在部门的名字? -SELECT ename,dname FROM emp_xwbing,dept_xwbing WHERE emp_xwbing.deptno=dept_xwbing.deptno; - -在关联查询中的过滤条件应当与连接体条件同时成立 -查看sales部门的员工信息? -SELECT ename,dname FROM emp_xwbing,dept_xwbing WHERE emp_xwbing.deptno=dept_xwbing.deptno AND dept_xwbing.dname='SALES'; - -当查询过程中,出现字段在两张表中都有的情况时,必须明确该字段属于哪张表,表可以取别名 -SELECT e.ename,e.deptno,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno; - -SELECT e.ename,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno AND d.loc='NEW YORK'; -查看平均工资高于2000的部门所在地? -SELECT AVG(e.sal), d.loc ,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno GROUP BY d.dname,d.loc HAVING AVG(e.sal)>2000; - -内连接:关联查询的另一种写法 -查看sales部门员工信息? -SELECT e.ename,d.dname FROM emp_xwbing e JOIN dept_xwbing d ON e.deptno=d.deptno WHERE d.dname='SALES'; - -外连接 -外连接在进行关联查询时可以将不满足条件的记录也查询出来 -外连接分为:左外连接,右外连接,全外连接 -左外连接:以join左侧表作为驱动表,该表中所有记录全部会列出来,那么当某条记录不满足连接条件时,该记录中来自右侧表中字段的值为NULL -SELECT e.ename,d.dname FROM emp_xwbing e LEFT JOIN dept_xwbing d ON e.deptno=d.deptno; -SELECT e.ename,d.dname FROM emp_xwbing e ,dept_xwbing d WHERE e.deptno=d.deptno(+); -SELECT e.ename,d.dname FROM emp_xwbing e LEFT|RIGHT|FULL JOIN dept_xwbing d ON e.deptno=d.deptno; - -自连接 -自连接指的是自己表中的记录对应自己表中的多条记录,建立的关联查询就是自连接 -自连接设计用于解决数据相同,但是存在上下级关系的树状结构使用. -查看每个员工以及其上司的名字? -SELECT E.ENAME ,M.ENAME BOSS FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO(+); -JONES的手下? -SELECT E.ENAME FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO(+) AND m.ename='JONES'; -查看每个领导有几个手下? -SELECT COUNT(e.mgr),m.ename FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO GROUP BY m.ename; -查看JONES的上司在哪个城市? -SELECT d.loc FROM EMP_XWBING E,EMP_XWBING M , dept_xwbing d WHERE E.MGR=M.EMPNO AND m.deptno=d.deptno AND e.ename='JONES' ; - - - - - - - - - - diff --git a/boot-service/src/main/java/com/xwbing/demo/oracle/day04.sql b/boot-service/src/main/java/com/xwbing/demo/oracle/day04.sql deleted file mode 100644 index e348288..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/oracle/day04.sql +++ /dev/null @@ -1,176 +0,0 @@ -子查询 -子查询是一条查询语句,其嵌套在其他sql语句中,作用是为外层的sql语句提供数据 - -和james相同部门的员工? -SELECT ename,deptno FROM emp_xwbing WHERE deptno=(SELECT deptno FROM emp_xwbing WHERE ename='JAMES'); - -子查询除了常用dql之外,也可以子啊ddl与dml中使用 -在ddl中应用: -使用子查询的结果快速创建一张表,若子查询中查询的内容是函数或表达式,那么该字段必须给别名. -CREATE TABLE myemployee -AS -SELECT - e.empno,e.ename,e.job,e.sal*12 sal, - e.deptno,d.dname,d.loc -FROM - emp e,dept d -WHERE - e.deptno=d.deptno - - -dml中使用子查询: -删除和james相同部门的所有员工? -DELETE FROM emp_xwbing WHERE deptno=(SELECT deptno FROM emp_xwbing WHERE ename='JAMES'); -UPDATE emp_xwbing SET SAL=SAL*1.1 WHERE deptno=(SELECT deptno FROM emp_xwbing WHERE ename='JAMES'); -SELECT * FROM EMP_XWBING; - -子查询根据查询结果集不同通常分为: -单行单列:常用在WHERE中(配合 =,>,< 等) -多行单列:常用在WHERE中(配合 IN,ANY,ALL) -多行多列:常用在WHERE中作为表看待 - -查看比clerk和salesman部门工资都高的员工? -SELECT ename,sal FROM emp_xwbing WHERE sal>ALL(SELECT deptno FROM emp_xwbing WHERE job='SALESMAN' OR job='CLERK'); -查看和clerk相同部门的其他职位员工? -SELECT ename FROM emp_xwbing WHERE deptno in (SELECT deptno FROM emp_xwbing WHERE JOB='CLERK'); - -EXISTS 关键字 -用在WHERE中,其后要根一个子查询,作用是若子查询至少可以查询出一条记录,那么exisets表达式返回真,NOT EXISTS 则起到相反的作用,查不到数据则返回真 -产看有员工的部门? -SELECT d.deptno,d.dname,d.loc FROM dept_xwbing d WHERE EXISTS(SELECT *FROM EMP_XWBING e WHERE e.deptno=d.deptno); -没有下属的员工? -SELECT n.ENAME FROM EMP_XWBING n WHERE NOT EXISTS(SELECT *FROM EMP_XWBING m WHERE N.EMPNO=M.MGR); - -查询列出最低薪水高于部门30的最低薪水的部门的最低薪水? -SELECT min(sal),deptno FROM emp_xwbing GROUP BY deptno having min(sal)>(SELECT min(sal) FROM emp_xwbing WHERE deptno=30); - -子查询在FROM部分: -查看高于自己所在部门平均工资的员工信息? -SELECT e.ename ,e.sal,e.deptno FROM emp_xwbing e,(SELECT avg(sal) avg_sal,deptno FROM emp_xwbing GROUP BY deptno) t WHERE e.deptno=t.deptno AND E.SAL>T.AVG_SAL; -子查询在SELECT部分:可以认为是外连接的另一种表现 -SELECT e.ename,e.sal,(SELECT d.dname FROM dept_xwbing d WHERE e.deptno=d.deptno ) dname FROM emp_xwbing e; - - - - -分页查询:oracle -通常一个查询语句查询的数据来量过大时,都会使用分页机制.分页就是将数据分批查询出来.一次只查询部分内容,这样的好处可以减少系统响应时间,减少系统资源开销 -分页由于在标准sql语句中没有定义,所以不同的数据库语法不相同(方言) -ORACLE 中使用 ROWNUM 这个伪列来实现分页. -ROWNUM,该列不存在于数据库任何表中,但是任何表都可以查询该列,该列在结果集中的值是每条记录的行号,行号从1开始. -编号是在查询的过程中进行的,只要可以从表中查询出一条数据,ROWNUM -SELECT rownum, ename,job FROM EMP_XWBING WHERE ROWNUM BETWEEN 2 AND 10 ; -在使用rownum对结果集编号的查询过程中不要使用rownum做>1以上数字的判断,否则查询不到任何数据.先编号再查询. -SELECT * FROM(SELECT rownum rn, ename,job FROM EMP_XWBING) WHERE rn BETWEEN 6 AND 10; - -若对查询内容有排序需求时,要先进行排序操作. -取公司工资排名的6-10? -SELECT * -FROM(SELECT rownum rn,t.* - FROM(SELECT ename,sal,job - FROM emp_xwbing - ORDER BY sal DESC)t - WHERE rownum<=10) -WHERE rn >5; - -换算范围值: -PageSize:每页显示的条数 -Page:页数 -start=(page-1)*pagesize+1 -end=pagesize*page - -DECODE(expr,search1,result1,[search2,result2.......][,default]) 无 default 返回 NULL -可以实现分支效果 -SELECT ename,job,sal,DECODE(job,'MANAGER',sal*1.2,'ANALYST',sal*1.1,'SALESMAN',sal*1.05,sal) bonus FROM emp_xwbing; -统计人数,将职位是'analyst'和'manager'看作一组,其他职位看作另一组 分别统计两组人数? -SELECT count(*) ,decode(job,'ANALYST','VIP','MANAGER','VIP','HTHER') FROM emp_xwbing GROUP BY decode(job,'ANALYST','VIP','MANAGER','VIP','HTHER'); -自定义排序 -SELECT deptno,dname,loc FROM dept_xwbing ORDER BY decode(dname,'OPERATIONS',1,'ACCOUNTING',2,'SALES',3); - -排序函数 -ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2) -排序函数可以将结果集按照指定的分段分组,然后在组内按照指定的分段排序,并为组内每条记录生成一个编号 -ROW_NUMBER:组内连续且唯一的数字 -公司每个部门的工资排名? -SELECT ename,sal,deptno,row_number() over(partition BY deptno ORDER BY sal DESC) rank FROM emp_xwbing; -RANK:组内不连续不唯一数字 -RANK() OVER(PARTITION BY col1 ORDER BY col2) -SELECT ename,sal,deptno,rank() over(partition BY deptno ORDER BY sal DESC) rank FROM emp_xwbing; -DENSE_RANK:组内连续但不唯一数字 -SELECT ename,sal,deptno,dense_rank() over(partition BY deptno ORDER BY sal DESC) rank FROM emp_xwbing; - - - -create table sales_xwbing(year_id number NOT NULL,month_id number NOT NULL,day_id number NOT NULL,sales_value number(10,2) NOT NULL); -insert into sales_xwbing -SELECT trunc(dbms_rANDom.value(2010,2012))as year_id, - trunc(dbms_rANDom.value(1,13))as month_id, - trunc(dbms_rANDom.value(1,32))as day_id, - round(dbms_rANDom.value(1,100),2)as sales_value -FROM dual -connect BY level <=1000; - - - -集合操作 -union,union all,intersect,minus - -union:并集 -SELECT ename ,job,sal FROM emp_xwbing WHERE job='MANAGER' -UNION -SELECT ename,job,sal FROM emp_xwbing WHERE sal>2500; - -intersect:交集 -SELECT ename ,job,sal FROM emp_xwbing WHERE job='MANAGER' -intersect -SELECT ename,job,sal FROM emp_xwbing WHERE sal>2500; - -minus:差集 -SELECT ename ,job,sal FROM emp_xwbing WHERE job='MANAGER' -minus -SELECT ename,job,sal FROM emp_xwbing WHERE sal>2500; - - -查看每天的营业额? -SELECT year_id,month_id,day_id,sum(sales_value) FROM sales_xwbing GROUP BY year_id,month_id,day_id ORDER BY year_id,month_id,day_id; - -高级分组函数 -ROLLUP函数 -rollup分组次数有指定的参数据决定,次数为参加个数+1次,而且分组原则是每个参数递减的形式,然后将这些分组的结果并在一个结果集中显示 -GROUP BY ROLLUP(a,b,c...) - -GROUP BY ROLLUP(a,b,c) -等同于 -GROUP BY a,b,c -union all -GROUP BY a,b -union all -GROUP BY a - - -查看每天,每月,每年,和总营业额? -SELECT year_id,month_id,day_id,sum(sales_value) FROM sales_xwbing GROUP BY rollup(year_id,month_id,day_id); - -CUBE 函数 -CUBE 分组次数是n个参数的2的n次方,会将每种组合进行一次分组并将所有结果并在一个结果集中显示 -SELECT year_id,month_id,day_id,sum(sales_value) FROM sales_xwbing GROUP BY cube(year_id,month_id,day_id) ORDER BY year_id,month_id,day_id; - -GROUPING SETS() -该分组函数允许按照指定的分组方式进行分组,然后将这些分组统计的结果并在一个结果集中显示函数的每一个参数,就是一种分组方式. -SELECT year_id,month_id,day_id,sum(sales_value) FROM sales_xwbing GROUP BY GROUPing sets((year_id,month_id,day_id),(year_id,month_id)) ORDER BY year_id,month_id,day_id; - - - - - - - - - - - - - - - - diff --git a/boot-service/src/main/java/com/xwbing/demo/oracle/day05.sql b/boot-service/src/main/java/com/xwbing/demo/oracle/day05.sql deleted file mode 100644 index 1dc0874..0000000 --- a/boot-service/src/main/java/com/xwbing/demo/oracle/day05.sql +++ /dev/null @@ -1,218 +0,0 @@ -CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH READ ONLY; -CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH CHECK OPTION; -视图: -数据库对象之一 -在sql语句中体现的角色与表相同.但视图是虚表,它只是对应一条SELECT语句查询的结果集,使用视图可以重用子查询,简化复杂查询 -创建包含10号部门员工信息的视图? -CREATE VIEW V_EMP_10_XWBING AS SELECT empno,ename,sal,deptno FROM EMP_XWBING WHERE deptno=10; -SELECT * FROM V_EMP_10_XWBING; -SELECT * FROM emp_xwbing; - -视图对应的子查询字段可以用别名,若字段含有函数或表达式,必须用别名 -CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno ID,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10; - -对视图进行DML操作 -对视图进行DML操作就是对视图数据来源的基础表进行的 -只能对简单视图进行DML操作,复杂视图不允许使用DML操作 -对简单视图进行DML操作时,也不不能违背基础表的约束条件 -INSERT INTO V_EMP_10_XWBING(EMPNO,ENAME,SALARY,DEPTNO) VALUES(1001,'jack',5000,10); - -当通过视图插入一条视图本身不可见的数据时,就是对基表的污染 -插入和删除都会造成污染,但是删除不会. -INSERT INTO V_EMP_10_XWBING VALUES(1001,'javk',5000,20); -UPDATE v_emp_10_xwbing SET deptno=20; - -对视图添加检查选项 -WITH CHECK OPTION -当视图添加了检查选项后,那么对视图进行插入或修改操作时,视图要求: -插入时:插入的数据视图必须对其可见 -修改时:修改后视图必须对数据可见 -CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH CHECK OPTION; - -为视图添加只读选项 -WITH READ ONLY -当一个视图添加类只读选项后, 该视图不允许进行DML操作 -CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH READ ONLY ; - -数据字典:user_objects user_views user_TABLEs -SELECT OBJECT_NAME FROM user_objects; -SELECT text FROM user_views; -SELECT TABLE_name FROM user_TABLEs; - -复杂视图 -查询语句含有函数,表达式,分组,去重多表关联查询,复杂视图不能进行DML -创建一个各部门工资情况的视图? -CREATE OR REPLACE view v_emp_deptno_xwbing AS SELECT d.deptno,d.dname,min(e.sal) min_sal,max(e.sal) max_sal,avg(e.sal) avg_sal,sum(e.sal) sum_sal FROM emp_xwbing e,dept_xwbing d WHERE d.deptno=e.deptno group BY d.deptno,d.dname; -SELECT *FROM v_emp_deptno_xwbing; -SELECT e.ename,e.sal,e.deptno FROM emp_xwbing e,v_emp_deptno_xwbing v WHERE e.deptno=v.deptno AND e.sal>v.avg_sal; - - -删除视图 -DROP VIEW V_name; -删除视图中的数据会将对应的基表数据删除,但是删除视图本身并不会对基表数据产生任何影响 -DROP VIEW V_EMP_10_XWBING; - -序列 -序列也是数据库对象之一 -序列是用来生成一系列数字的,序列通常为表的主键提供值使用 -CREATE SEQUENCE seq_emp_xwbing start WITH 1 increment BY 1; - -序列支持两个伪列 -NEXTVAL:使序列生成下一个数字,新创建的序列则返回 START WITH 指定的数字.序列是不能回退的,所以通过NEXTVAL获取了下一个数字后就无法获取之前生成的数字了 -CURRVAL:获取序列生成的最后一个数字,无论调用多少次都不会导致序列生成新的数字,但是新创建的序列至少调用一次NEXTVAL后才可以开始使用CURRVAL -SELECT seq_emp_xwbing.nextval FROM dual; -SELECT seq_emp_xwbing.currval FROM dual; - -INSERT INTO emp_xwbing(empno,ename,job,sal) VALUES(seq_emp_xwbing.nextval,'jack','clerk',5000); -SELECT *FROM emp_xwbing; -desc emp_xwbing; -CREATE TABLE wwww(id varchar2); -INSERT INTO www(id) VALUES(SYS_GUID()); -SELECT * FROM www; -UUID -字符串类型的主键值,32位不重复字符串 -ORACLE提供了一个函数可以生成UUID -SELECT SYS_GUID() FROM DUAL; - - - -删除序列 -DROP SEQUENCE seq_emp_xwbing; - - -索引 -数据库对象之一 -一种提高查询效率的机制 -CREATE INDEX idx_name ON name(col); - -CREATE INDEX idx_emp ON emp(ename); -复合索引 -CREATE INDEX idx_emp_job_sal ON emp(job,sal); -基于函数索引 -CREATE INDEX emp_ename_upper_idx ON emp(UPPER(ename)); - -重建索引 -ALTER INDEX IDX_EMP REBUILD; -删除索引 -DROP INDEX IDX_EMP; - - - -约束 CONSTRAINT -约束条件: -非空约束(Not Null),简称NN -唯一性约束(Unique),简称UK -主键约束(Primary Key),简称PK -外键约束(Foreign Key),简称FK -检查约束(Check),简称CK - - -非空约束:not null -建表时添加非空约束 -CREATE TABLE employy_xwbing(eid number(6),name varchar2(30) not null, salary number(7,2),hiredate date constraint employy_xwbing_hiredate_nn not null); -修改表添加非空约束 -alter TABLE employy_xwbing modify(eid number(6) not null); -修改表取消非空约束 -alter TABLE employy_xwbing modify(eid number(6) null); - -唯一性约束: UNIQUE -当某个字段使用了唯一性约束后,该字段的值或者字段的组合在表中是不允许有重复值的,但是null除外 -CREATE TABLE xxx_xwbing ( -eid NUMBER(6), -name VARCHAR2(30), -email VARCHAR2(50), -salary NUMBER(7, 2), -hiredate DATE, -CONSTRAINT empl_xwbing_email_uk UNIQUE(email) -); - -INSERT INTO empl_xwbing(eid,name,email) VALUES(21,'21','4'); - -建表之后添加唯一性约束: -alter TABLE empl_xwbing add constraint empl_xwbing_name_uk unique(name); - - - -主键约束 Primary Key -主键可以用来在表中唯一的确定一行数据.一个表上只允许建立一个主键. - - - CREATE TABLE emploo_xwbing ( - eid NUMBER(6) primary key, - name VARCHAR2(30), - email VARCHAR2(50), - salary NUMBER(7, 2), - hiredate DATE - ); - -INSERT INTO emploo_xwbing(eid,name) VALUES(2,'jack'); - - -外键约束:一般不用 - -检查约束(Check) -检查(Check)约束条件用来强制在字段上的每个值都要满足Check中定义的条件.当定义了Check约束的列新增或修改数据时,数据必须符合Check约束中定义的条件. - -员工薪水必须大于2000? -alter TABLE emploo_xwbing add constraint emploo_xwbing_slary_ck check(salary>2000); -正常插入数据? -INSERT INTO emploo_xwbing(eid,name,salary,email) VALUES(11,'jack',3000,'www'); -试图插入小于2000的? -INSERT INTO emploo_xwbing(eid,name,salary,email) VALUES(13,'jene',1111,'www'); -SELECT * FROM emploo_xwbing; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/ExpressInfo.java b/boot-service/src/main/java/com/xwbing/domain/entity/ExpressInfo.java deleted file mode 100644 index 1bf81fc..0000000 --- a/boot-service/src/main/java/com/xwbing/domain/entity/ExpressInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xwbing.domain.entity; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/11/17 9:26 - * 作者: xiangwb - * 说明: 快递信息 - */ -@Data -@ApiModel -public class ExpressInfo { - @ApiModelProperty(value = "快递公司编号", example = "HTKY") - private String shipperCode; - @ApiModelProperty(value = "物流单号", example = "211386517825") - private String logisticCode; -// @ApiModelProperty(value = "快递名称", example = "百世汇通") -// private String expressName; -// @ApiModelProperty(value = "订单编号", example = "201703140000000018") -// private String orderNo; -} diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/ExpressTrace.java b/boot-service/src/main/java/com/xwbing/domain/entity/ExpressTrace.java deleted file mode 100644 index 7d19593..0000000 --- a/boot-service/src/main/java/com/xwbing/domain/entity/ExpressTrace.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.xwbing.domain.entity; - -import lombok.Data; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/11/17 9:22 - * 作者: xiangwb - * 说明: 快递追踪信息 - */ -@Data -public class ExpressTrace { - private String acceptTime; - private String acceptStation; -} diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/model/EntityModel.java b/boot-service/src/main/java/com/xwbing/domain/entity/model/EntityModel.java deleted file mode 100644 index f776b06..0000000 --- a/boot-service/src/main/java/com/xwbing/domain/entity/model/EntityModel.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.xwbing.domain.entity.model; - -import lombok.Data; - -import java.util.List; - -/** - * 说明: 实体模型 - * 项目名称: boot-module-demo - * 创建时间: 2017/5/10 16:36 - * 作者: xiangwb - */ -@Data -public class EntityModel { - private String character ; - private int number; - private Integer integer; - private double decimal; - private boolean b; - private List list; -} diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/model/ValidateModel.java b/boot-service/src/main/java/com/xwbing/domain/entity/model/ValidateModel.java deleted file mode 100644 index e8a574d..0000000 --- a/boot-service/src/main/java/com/xwbing/domain/entity/model/ValidateModel.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.xwbing.domain.entity.model; - -import lombok.Data; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; -import org.hibernate.validator.constraints.NotEmpty; -import org.springframework.format.annotation.DateTimeFormat; - -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.Min; -import javax.validation.constraints.Pattern; -import java.util.Date; - -/** - * 说明: hibernate validate JSR303校验框架 - * controller层新增或更新的实体前加@Valid注解 - * 项目名称: boot-module-demo - * 创建时间: 2017/5/17 16:13 - * 作者: xiangwb - */ -@Data -public class ValidateModel { - @NotBlank(message = "name不能为空") - @Length(max = 50, message = "name长度为1-50") - private String name; - - @NotEmpty(message = "age不能为空") - @Min(value = 0, message = "age不能为负") - private int age; - - @NotEmpty(message = "money不能为空") - @DecimalMin(value = "0", message = "money不能为负") - private double money; - - @DateTimeFormat(pattern = "yyyy-MM-dd") - private Date birthDay; - - @NotBlank(message = "happyTime不能为空") - @Pattern(regexp = "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}", message = "happyTime格式为yyyy-MM-dd HH:mm:ss") - private String happyTime; - - @Email(message = "邮箱格式不正确") - private String email; - - @NotBlank(message = "sex不能为空") - @Pattern(regexp = "[01]", message = "sex格式为0|1,0代表女,1代表男") - private String sex; -} diff --git a/boot-service/src/main/java/com/xwbing/domain/entity/vo/ExpressInfoVo.java b/boot-service/src/main/java/com/xwbing/domain/entity/vo/ExpressInfoVo.java deleted file mode 100644 index fb0f436..0000000 --- a/boot-service/src/main/java/com/xwbing/domain/entity/vo/ExpressInfoVo.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xwbing.domain.entity.vo; - -import com.xwbing.domain.entity.ExpressTrace; -import lombok.Data; - -import java.util.List; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/11/17 9:20 - * 作者: xiangwb - * 说明: 快递信息展示 - */ -@Data -public class ExpressInfoVo { - /** - * 快递代码 - */ - private String shipperCode; - private boolean success; - /** - * 运单号 - */ - private String logisticCode; - /** - * 状态 - */ - private String state; - /** - * 物流信息 - */ - private List traces; - /** - * 描述 - */ - private String describe; -} diff --git a/boot-service/src/main/java/com/xwbing/service/DemoService.java b/boot-service/src/main/java/com/xwbing/service/DemoService.java deleted file mode 100644 index da40a5c..0000000 --- a/boot-service/src/main/java/com/xwbing/service/DemoService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.xwbing.service; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class DemoService { - public static void main(String[] args) { - List list = new ArrayList();// 有序 - list.add(1); - list.add(2); - list.add(3); - list.add(5); - list.add(4); - list.add(6); - System.out.println("filter:" + list.stream().filter(o1 -> o1 > 3 && o1 < 8).collect(Collectors.toList())); - list.removeIf(o1 -> o1 > 3 && o1 < 8); - System.out.println(list); - } -} diff --git a/boot-service/src/main/java/com/xwbing/service/other/CookieSessionService.java b/boot-service/src/main/java/com/xwbing/service/other/CookieSessionService.java deleted file mode 100644 index 124f760..0000000 --- a/boot-service/src/main/java/com/xwbing/service/other/CookieSessionService.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.xwbing.service.other; - -import com.xwbing.util.RestMessage; -import org.springframework.stereotype.Service; - -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/12/19 10:33 - * 作者: xiangwb - * 说明: cookie session服务层 - */ -@Service -public class CookieSessionService { - - public RestMessage session(HttpServletRequest request) { - RestMessage restMessage = new RestMessage(); -// WebUtils.setSessionAttribute(request, "session", "sessionValue"); -// String sessionValue = (String) WebUtils.getSessionAttribute(request, "sessionValue"); - HttpSession session = request.getSession(); - session.setAttribute("session", "sessionValue"); - String sessionId = session.getId(); - session.setMaxInactiveInterval(60 * 60);//单位为秒,-1永不过期 - String test = (String) session.getAttribute("session"); - restMessage.setData("sessionId:" + sessionId + ",value:" + test); - restMessage.setSuccess(true); - return restMessage; - } - - public RestMessage cookie(HttpServletResponse response, HttpServletRequest request) { - RestMessage restMessage = new RestMessage(); - Cookie cookie = new Cookie("cookie", "cookieValue"); - cookie.setMaxAge(60 * 60);//单位为秒 - //设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问 - cookie.setPath("/"); - response.addCookie(cookie); - Map cookieMap = readCookieMap(request); - restMessage.setData(cookieMap); - restMessage.setSuccess(true); - return restMessage; - } - - /** - * 将cookie封装到Map里面 - * - * @param request - * @return - */ - private Map readCookieMap(HttpServletRequest request) { - Map cookieMap = new HashMap<>(); - Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 - if (null != cookies) {//JSESSIONID:java sessionId - Arrays.stream(cookies).forEach(cookie -> cookieMap.put(cookie.getName(), cookie)); - } - return cookieMap; - } -} diff --git a/boot-service/src/main/java/com/xwbing/service/other/ExpressDeliveryService.java b/boot-service/src/main/java/com/xwbing/service/other/ExpressDeliveryService.java deleted file mode 100644 index be5c0df..0000000 --- a/boot-service/src/main/java/com/xwbing/service/other/ExpressDeliveryService.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.xwbing.service.other; - -import com.alibaba.fastjson.JSONObject; -import com.xwbing.constant.CommonEnum; -import com.xwbing.domain.entity.ExpressInfo; -import com.xwbing.domain.entity.vo.ExpressInfoVo; -import com.xwbing.exception.BusinessException; -import com.xwbing.util.KdniaoUtil; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; -import org.springframework.stereotype.Service; - -import java.util.*; - -import static com.xwbing.util.KdniaoUtil.urlEncoder; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/11/17 9:14 - * 作者: xiangwb - * 说明: 快递查询服务层 - */ -@Service -@PropertySource("classpath:kdniao.properties") -public class ExpressDeliveryService { - private final Logger logger = LoggerFactory.getLogger(ExpressDeliveryService.class); - /** - * 电商用户ID - */ - @Value("${EBusinessID}") - private String EBusinessID; - /** - * 电商加密私钥 - */ - @Value("${appKey}") - private String appKey; - /** - * 正式请求url - */ - @Value("${reqURL}") - private String reqURL; - - /** - * 快递公司列表 - * - * @return - */ - public List listShipperCode() { - List resultVos = new ArrayList<>(); - JSONObject jsonObject; - for (CommonEnum.ShipperCodeEnum shipperCode : CommonEnum.ShipperCodeEnum.values()) { - jsonObject = new JSONObject(); - jsonObject.put("code", shipperCode.getCode()); - jsonObject.put("name", shipperCode.getName()); - resultVos.add(jsonObject); - } - return resultVos; - } - - /** - * 快递信息查询 - * - * @param info - * @return - */ - public ExpressInfoVo queryOrderTraces(ExpressInfo info) { - String requestData = "{'ShipperCode':'" + info.getShipperCode() + "','LogisticCode':'" + info.getLogisticCode() + "'}"; - Map params = new HashMap<>(); - try { - params.put("RequestData", KdniaoUtil.urlEncoder(requestData, "UTF-8")); - params.put("EBusinessID", EBusinessID); - params.put("RequestType", "1002"); - String dataSign = KdniaoUtil.encrypt(requestData, appKey, "UTF-8"); - params.put("DataSign", urlEncoder(dataSign, "UTF-8")); - params.put("DataType", "2"); - } catch (Exception e) { - logger.error("快递查询出错:{}", e.getMessage()); - throw new BusinessException("快递查询出错"); - } - // 返回物流信息 - // status: 0|null 无信息 1已取件 2在途中 3已签收 4问题件 5待取件 6待派件 8已发货 9未发货 - String result = KdniaoUtil.sendPost(reqURL, params); - ExpressInfoVo infoVo = JSONObject.parseObject(result, ExpressInfoVo.class); - if (infoVo != null) { - boolean success = infoVo.isSuccess(); - logger.info("查询快递信息:{}", success); - if(success){ - String status= StringUtils.isNotEmpty(infoVo.getState()) ? infoVo.getState() : "0"; - int statusValue = Integer.valueOf(status); - Optional statusEnum = Arrays.stream(CommonEnum.ExpressStatusEnum.values()).filter(obj -> obj.getValue() == statusValue).findFirst(); - statusEnum.ifPresent(expressStatusEnum -> infoVo.setDescribe(expressStatusEnum.getName())); - // TODO: 2017/11/16 根据公司业务处理返回的信息...... - } - } - return infoVo; - } - - // DEMO - public static void main(String[] args) { - ExpressDeliveryService api = new ExpressDeliveryService(); - ExpressInfo info = new ExpressInfo(); - info.setShipperCode("HTKY"); - info.setLogisticCode("211386517825"); - try { - ExpressInfoVo result = api.queryOrderTraces(info); - // TODO: 根据公司业务处理返回的信息...... - } catch (Exception e) { - throw new BusinessException(e.getMessage()); - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/service/other/MailService.java b/boot-service/src/main/java/com/xwbing/service/other/MailService.java deleted file mode 100644 index 3786b87..0000000 --- a/boot-service/src/main/java/com/xwbing/service/other/MailService.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.xwbing.service.other; - -import com.xwbing.exception.BusinessException; -import com.xwbing.util.RestMessage; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.FileSystemResource; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; -import java.io.File; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/9/18 11:31 - * 作者: xiangwb - * 说明: mail服务层 - */ -@Service -public class MailService { - @Resource - private JavaMailSender mailSender; - @Value("${spring.mail.username}") - private String from; - - /** - * 发送纯文本的简单邮件 - * - * @param to 收件人 - * @param subject 主题 - * @param content 文本内容 - */ - public RestMessage sendSimpleMail(String to, String subject, String content) { - RestMessage restMessage = new RestMessage(); - SimpleMailMessage message = new SimpleMailMessage(); - message.setFrom(from); - message.setTo(to); - message.setSubject(subject); - message.setText(content); - mailSender.send(message); - restMessage.setSuccess(true); - restMessage.setMessage("纯文本邮件已经发送"); - return restMessage; - } - - /** - * 发送html格式的邮件 - * - * @param to 收件人 - * @param subject 主题 - * @param content 文本内容 - */ - public RestMessage sendHtmlMail(String to, String subject, String content) { - RestMessage restMessage = new RestMessage(); - MimeMessage message = mailSender.createMimeMessage(); - try { - //true表示需要创建一个multipart message - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true);//启用html - mailSender.send(message); - restMessage.setSuccess(true); - restMessage.setMessage("html邮件已经发送!"); - return restMessage; - } catch (MessagingException e) { - throw new BusinessException("发送html邮件时发生异常"); - } - } - - /** - * 发送带附件的邮件 - * - * @param to 收件人 - * @param subject 主题 - * @param content 文本内容 - * @param rscPath 附件文件路径 - */ - public RestMessage sendAttachmentsMail(String to, String subject, String content, String rscPath) { - RestMessage restMessage = new RestMessage(); - MimeMessage message = mailSender.createMimeMessage(); - try { - //true表示需要创建一个multipart message - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - //添加附件1 - FileSystemResource file = new FileSystemResource(new File(rscPath)); - String fileName = rscPath.substring(rscPath.lastIndexOf(File.separator) + 1); - helper.addAttachment(fileName, file); - // 可以继续添加附件。。。。。 - mailSender.send(message);//发送邮件 - restMessage.setSuccess(true); - restMessage.setMessage("带附件的邮件已经发送!"); - return restMessage; - } catch (MessagingException e) { - throw new BusinessException("发送带附件的邮件时发生异常"); - } - } - - /** - * 发送嵌入静态资源(一般是图片)的邮件 - * - * @param to 收件人 - * @param subject 主题 - * @param content 邮件内容,需要包括一个静态资源的id,比如: - * @param rscPath 静态资源路径 - * @param rscId 静态资源id - */ - public RestMessage sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) { - RestMessage restMessage = new RestMessage(); - MimeMessage message = mailSender.createMimeMessage(); - try { - //true表示需要创建一个multipart message - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - //添加多个图片可以使用多条 和 helper.addInline(rscId, res) 来实现 - FileSystemResource res = new FileSystemResource(new File(rscPath)); - helper.addInline(rscId, res); - mailSender.send(message); - restMessage.setSuccess(true); - restMessage.setMessage("嵌入静态资源的邮件已经发送!"); - return restMessage; - } catch (MessagingException e) { - throw new BusinessException("发送嵌入静态资源的邮件时发生异常!"); - } - } -} diff --git a/boot-service/src/main/java/com/xwbing/service/other/QRCodeZipService.java b/boot-service/src/main/java/com/xwbing/service/other/QRCodeZipService.java deleted file mode 100644 index c479ea1..0000000 --- a/boot-service/src/main/java/com/xwbing/service/other/QRCodeZipService.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.xwbing.service.other; - -import com.xwbing.exception.BusinessException; -import com.xwbing.util.QRCodeUtils; -import com.xwbing.util.RestMessage; -import com.xwbing.util.ZipUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.io.ClassPathResource; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * 项目名称: boot-module-demo - * 创建时间: 2017/11/17 13:36 - * 作者: xiangwb - * 说明: - */ -@Service -public class QRCodeZipService { - private final Logger logger = LoggerFactory.getLogger(QRCodeZipService.class); - - /** - * 生成默认长度的二维码 - * - * @param name 图片名 - * @param text 二维码内容 - * @return - */ - public RestMessage createQRCode(String name, String text) { - RestMessage result = new RestMessage(); - String path = getPath(); - File output = new File(path + File.separator + name + ".png"); - QRCodeUtils.createCode(text, output); - result.setSuccess(true); - result.setMessage("生成二维码成功"); - return result; - } - - /** - * 解析二维码 - * - * @param file - * @return - */ - public RestMessage decode(File file) { - RestMessage result = new RestMessage(); - try { - String decode = QRCodeUtils.decode(file); - result.setData(decode); - result.setSuccess(true); - result.setMessage("解析二维码成功"); - return result; - } catch (Exception e) { - logger.error("解析二维码失败"); - throw new BusinessException("解析二维码失败"); - } - } - - /** - * 获取图片zip - * - * @return - */ - public RestMessage batchGetImage(HttpServletResponse response, String[] names, String fileName) { - List files = new ArrayList<>(); - if (names.length == 0) { - throw new BusinessException("请选择要导出的图片"); - } - Arrays.stream(names).forEach(name -> { - File file = getFile(name); - if (file != null && file.length() > 0) { - files.add(file); - } - }); - return zipFile(response, files, fileName); - } - - /** - * 根据文件名获取图片 - * - * @param name - * @return - */ - private File getFile(String name) { - String path = getPath(); - File output = new File(path + File.separator + name + ".png"); - if (output.exists()) { - return output; - } - return null; - } - - /** - * 获取pic路径 - * - * @return - */ - public String getPath() { - ClassPathResource pic = new ClassPathResource("file"); - String absolutePath; - try { - absolutePath = pic.getFile().getAbsolutePath(); - } catch (IOException e) { - throw new BusinessException("获取图片路径错误"); - } - return absolutePath; - } - - /** - * 导出文件 - * - * @return - */ - private RestMessage zipFile(HttpServletResponse response, List files, String fileName) { - RestMessage restMessage = new RestMessage(); - String path = getPath(); - ZipUtil.zipFile(response, files, path, fileName); - restMessage.setSuccess(true); - restMessage.setMessage("导出zip文件成功"); - return restMessage; - } -} diff --git a/boot-service/src/main/resources/file/QRCode.png b/boot-service/src/main/resources/file/QRCode.png deleted file mode 100644 index 7a16c012aad97a50374f0d4de42eb2a635fba971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)1_pz{V6dNJyD4Kk z9$dbZ7Yj^}$x{+Rg4wnJOo_R3&}}J!8|*gb4eVZ4gRomzUAWR^zh2*96Id(alBeaW z*25;SKC)OZ`(D@_mV>TjC-gN7rpD?Vv3aHP>CUgQu3j)bcCO#nw_m}uSl(R+Nm2Cc zahKowHNw=HF`e~(3Z}z`B3@c3+bm3r4Gpc4j5#UdFikdY?xcvvHiKY#tRFY^uGW4! zdWFqn(nZzT;@>3;Hk*~t5U*-IY%&`T{mM44r46RU`iIdVL04Ma2vcMH9Rdb}!C-&G Yp65QMDs)JNxBvhE07*qoM6N<$f(ZeSmH+?% diff --git a/boot-service/src/main/resources/file/logo.png b/boot-service/src/main/resources/file/logo.png deleted file mode 100644 index e63f562716caff7efb2c103dc6e66020e7f56ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^vLMU|BpB*mL@feRg`O^sAr-fhfBgUdpP$X-QFDhg z>*4ROKZ^3iH|aBVu5eHg5W>{>y&&`1CdQ z68kt=nS6gnahkZkyUXA9etT+T)!{g%&W3sNJn>G>jY->s8kTwZAKW1B!oZMqDn!Of R?REjk5uUDoF6*2UngHQ+JnR4f diff --git a/boot-service/src/main/resources/kdniao.properties b/boot-service/src/main/resources/kdniao.properties deleted file mode 100644 index f389072..0000000 --- a/boot-service/src/main/resources/kdniao.properties +++ /dev/null @@ -1,6 +0,0 @@ -#---------------快递鸟config---------------- -#------------ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.aspx-------------# -#------------相关文档:http://www.kdniao.com/documents-------------# -EBusinessID=1255383 -appKey=94f7286a-8ae5-4394-8809-26dd645e82ca -reqURL=http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx diff --git a/boot-web/src/main/java/com/xwbing/configuration/SchedulingConfig.java b/boot-web/src/main/java/com/xwbing/configuration/SchedulingConfig.java deleted file mode 100644 index 6c3736f..0000000 --- a/boot-web/src/main/java/com/xwbing/configuration/SchedulingConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xwbing.configuration; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; - -/** - * 说明: 定时任务定时类 - * 项目名称: boot-module-demo - * 创建时间: 2017/5/10 16:36 - * 作者: xiangwb - */ -@Configuration -@EnableScheduling // 启用定时任务 -public class SchedulingConfig { - private static final Logger logger = LoggerFactory.getLogger(SchedulingConfig.class); - - @Scheduled(cron = "0 */30 * * * ?") // 每半小时执行一次 - public void scheduler() { - logger.info("scheduled =================="); - //TODO - } - -} diff --git a/boot-web/src/main/java/com/xwbing/configuration/SwaggerConfig.java b/boot-web/src/main/java/com/xwbing/configuration/SwaggerConfig.java index e004c47..1b791bd 100644 --- a/boot-web/src/main/java/com/xwbing/configuration/SwaggerConfig.java +++ b/boot-web/src/main/java/com/xwbing/configuration/SwaggerConfig.java @@ -23,7 +23,6 @@ public class SwaggerConfig { @Bean public Docket sysDocket() { return new Docket(DocumentationType.SWAGGER_2) - .groupName("system") .apiInfo(sysApiInf()) .select() .apis(RequestHandlerSelectors.basePackage("com.xwbing.controller.sys")) @@ -40,25 +39,4 @@ public class SwaggerConfig { .version("1.0.0") .build(); } - - @Bean - public Docket otherDocket() { - return new Docket(DocumentationType.SWAGGER_2) - .groupName("other") - .apiInfo(otherApiInf()) - .select() - .apis(RequestHandlerSelectors.basePackage("com.xwbing.controller.other")) - .paths(PathSelectors.any()) - .build(); - } - - private ApiInfo otherApiInf() { - return new ApiInfoBuilder() - .title("RESTful API Document") - .description("other接口文档") - .termsOfServiceUrl("http://localhost:8080/swagger-ui.html") - .contact(new Contact("项伟兵", "https://github.com/xiangwbs/boot-module-pro.git", "xiangwbs@163.com")) - .version("1.0.0") - .build(); - } } diff --git a/boot-web/src/main/java/com/xwbing/controller/other/MailTestControl.java b/boot-web/src/main/java/com/xwbing/controller/other/MailTestControl.java deleted file mode 100644 index 0f78475..0000000 --- a/boot-web/src/main/java/com/xwbing/controller/other/MailTestControl.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.xwbing.controller.other; - -import com.alibaba.fastjson.JSONObject; -import com.xwbing.annotation.LogInfo; -import com.xwbing.service.other.MailService; -import com.xwbing.util.JsonResult; -import com.xwbing.util.RestMessage; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; - -/** - * 项目名称: sb-boot-module-demo - * 创建时间: 2017/9/18 13:42 - * 作者: xiangwb - * 说明:邮件测试控制层 - */ -@Api(tags = "mailApi", description = "邮件测试相关接口") -@RestController -@RequestMapping("/mail/") -public class MailTestControl { - @Resource - private MailService mailService; - - @LogInfo("发送纯文本邮件") - @GetMapping("sendSimpleMail") - @ApiOperation(value = "发送纯文本邮件") - public JSONObject sendSimpleMail() { - RestMessage restMessage = mailService.sendSimpleMail("786461501@qq.com", "测试邮件", "收到一个纯文本邮件"); - return JsonResult.toJSONObj(restMessage); - } - - @LogInfo("发送html格式邮件") - @GetMapping("sendHtmlMail") - @ApiOperation(value = "发送html格式邮件") - public JSONObject sendHtmlMail() { - String content = "" + - "" + - "

hello world ! 这是一封Html邮件!

" + - "" + - ""; - RestMessage restMessage = mailService.sendHtmlMail("786461501@qq.com", "html测试邮件", content); - return JsonResult.toJSONObj(restMessage); - } - - @LogInfo("发送带附件邮件") - @GetMapping("sendAttachmentsMail") - @ApiOperation(value = "发送带附件邮件") - public JSONObject sendAttachmentsMail() { - String path = "C:\\Users\\admin\\Desktop\\qq.txt"; - RestMessage restMessage = mailService.sendAttachmentsMail("786461501@qq.com", "附件测试邮件", "收到一个带附件邮件", path); - return JsonResult.toJSONObj(restMessage); - } - - @LogInfo("发送文本内嵌图片邮件") - @GetMapping("sendInlineResourceMail") - @ApiOperation(value = "发送文本内嵌图片邮件") - public JSONObject sendInlineResourceMail() { - String rscId = "file"; - String content = "这是有图片的邮件:"; - String imgPath = "C:\\Users\\admin\\Desktop\\0000001.png"; - RestMessage restMessage = mailService.sendInlineResourceMail("786461501@qq.com", "内嵌图片测试邮件", content, imgPath, rscId); - return JsonResult.toJSONObj(restMessage); - } -} diff --git a/boot-web/src/main/java/com/xwbing/controller/other/TestControl.java b/boot-web/src/main/java/com/xwbing/controller/other/TestControl.java deleted file mode 100644 index bf6fe38..0000000 --- a/boot-web/src/main/java/com/xwbing/controller/other/TestControl.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.xwbing.controller.other; - -import com.alibaba.fastjson.JSONObject; -import com.xwbing.annotation.LogInfo; -import com.xwbing.domain.entity.ExpressInfo; -import com.xwbing.domain.entity.vo.ExpressInfoVo; -import com.xwbing.redis.RedisService; -import com.xwbing.service.other.CookieSessionService; -import com.xwbing.service.other.ExpressDeliveryService; -import com.xwbing.service.other.QRCodeZipService; -import com.xwbing.util.HttpUtil; -import com.xwbing.util.JsonResult; -import com.xwbing.util.RSAUtil; -import com.xwbing.util.RestMessage; -import io.swagger.annotations.Api; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.util.List; -import java.util.concurrent.CompletableFuture; - -/** - * 说明: 测试控制层 - * 项目名称: boot-module-demo - * 创建时间: 2017/5/5 9:21 - * 作者: xiangwb - */ -@Api(tags = "testApi", description = "测试相关接口") -@RestController -@RequestMapping("/test/") -public class TestControl { - @Resource - private RedisService redisService; - @Resource - private ExpressDeliveryService expressDeliveryService; - @Resource - private QRCodeZipService qrCodeZipService; - @Resource - private CookieSessionService cookieSessionService; - private final Logger logger = LoggerFactory.getLogger(TestControl.class); - - @LogInfo("redis功能测试") - @GetMapping("redis") - public void redis() { - redisService.set("redis", "xwbing"); - String s = redisService.get("redis"); - logger.info("redis获取的数据为:" + s); - } - - @LogInfo("log功能测试") - @GetMapping("log") - public void log() { - logger.info("info test"); - logger.error("error test"); - } - - @LogInfo("获取快递列表") - @GetMapping("listShipperCode") - public JSONObject listShipperCode() { - List list = expressDeliveryService.listShipperCode(); - return JsonResult.toJSONObj(list, ""); - } - - @LogInfo("快递查询") - @PostMapping("expressInfo") - public JSONObject getExpressInfo(@RequestBody ExpressInfo info) { - if (StringUtils.isEmpty(info.getLogisticCode()) || StringUtils.isEmpty(info.getShipperCode())) { - return JsonResult.toJSONObj("快递公司或物流单号不能为空"); - } - ExpressInfoVo infoVo = expressDeliveryService.queryOrderTraces(info); - return JsonResult.toJSONObj(infoVo, "查询快递信息成功"); - } - - @LogInfo("生成二维码") - @PostMapping("createQRCode") - public JSONObject createQRCode(@RequestParam String name, @RequestParam String text) { - RestMessage qrCode = qrCodeZipService.createQRCode(name, text); - return JsonResult.toJSONObj(qrCode); - } - - @LogInfo("解析二维码") - @GetMapping("decode") - public JSONObject decode(@RequestParam String path) { - if (StringUtils.isEmpty(path)) { - return JsonResult.toJSONObj("二维码图片路径不能为空"); - } - File file = new File(path); - RestMessage decode = qrCodeZipService.decode(file); - return JsonResult.toJSONObj(decode); - } - - @LogInfo("导出zip") - @GetMapping("batchGetImage") - public JSONObject batchGetImage(HttpServletResponse response, @RequestParam String[] names, @RequestParam String fileName) { - if (StringUtils.isEmpty(fileName)) { - return JsonResult.toJSONObj("zip名称不能为空"); - } - RestMessage restMessage = qrCodeZipService.batchGetImage(response, names, fileName); - return JsonResult.toJSONObj(restMessage); - } - - @LogInfo("rsa") - @GetMapping("rsa") - public void rsa() { - String en = RSAUtil.encrypt("123456"); - String de = RSAUtil.decrypt(en); - System.out.println(de); - } - - @LogInfo("httpUtil") - @PostMapping("httpUtil") - public JSONObject httpUtil(@RequestBody JSONObject param) { -// String url = "http://localhost:8080/user/listAll"; -// return HttpClientUtil.get(url); - String url = "http://localhost:8080/user/save"; - return HttpUtil.postByJson(url, param); - } - - @LogInfo("session") - @GetMapping("session") - public JSONObject session(HttpServletRequest request) { - return JsonResult.toJSONObj(cookieSessionService.session(request)); - } - - @LogInfo("cookie") - @GetMapping("cookie") - public JSONObject cookie(HttpServletRequest request, HttpServletResponse response) { - return JsonResult.toJSONObj(cookieSessionService.cookie(response, request)); - } - - @LogInfo("completableFuture") - @GetMapping("completableFuture") - public JSONObject completableFuture() { - return JsonResult.toJSONObj(thenCombine(), ""); - } - - private JSONObject thenCombine() { - return CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "hello"; - }).thenCombine(CompletableFuture.supplyAsync(() -> { - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - //出现异常,异常会被限制在执行任务的线程范围内 - if (1 == 1) { - throw new RuntimeException("545456"); - } - return "world"; - }), (s1, s2) -> { - JSONObject object = new JSONObject(); - object.put("s1", s1); - object.put("s2", s2); - return object; - }).join(); - } -} diff --git a/boot-web/src/main/resources/file/QRCode.png b/boot-web/src/main/resources/file/QRCode.png deleted file mode 100644 index 7a16c012aad97a50374f0d4de42eb2a635fba971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)1_pz{V6dNJyD4Kk z9$dbZ7Yj^}$x{+Rg4wnJOo_R3&}}J!8|*gb4eVZ4gRomzUAWR^zh2*96Id(alBeaW z*25;SKC)OZ`(D@_mV>TjC-gN7rpD?Vv3aHP>CUgQu3j)bcCO#nw_m}uSl(R+Nm2Cc zahKowHNw=HF`e~(3Z}z`B3@c3+bm3r4Gpc4j5#UdFikdY?xcvvHiKY#tRFY^uGW4! zdWFqn(nZzT;@>3;Hk*~t5U*-IY%&`T{mM44r46RU`iIdVL04Ma2vcMH9Rdb}!C-&G Yp65QMDs)JNxBvhE07*qoM6N<$f(ZeSmH+?%