xx外卖知识补充
1.1 pojo类
-
vo(Value Object/View Object - 值对象/视图对象)
Value Object,值对象,也称为业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方(实际上跟DO有点类似)。 VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。 VO通常用于业务层之间的数据传递,其仅仅包含数据。但应是抽象出的业务对象。根据业务的需要,其可以和表对应或者不。用new关键字创建,由GC进行回收
-
DTO(Data Transfer Object - 数据传输对象)
DTO概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载。 DTO用于表示一个数据传输对象,通常用于不同服务或服务不同分层之间的数据传输。 DTO与VO与类似,但也有一些不同,这个不同主要是设计理念上的,比如API服务需要使用的是DTO,而用于展示层页面的使用的是VO。例如,为了展示方便,在VO的性别字段存的是男和女,而在DTO中存的是1或者2这样的代码。
1.2 MD5
MD5是一种哈希算法,用来保证信息的完整性。 一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。
java中使用DIgestUtils工具类的md5DigestAsHex( byte),即可加密
1.3 Swagger
》便利了前后端交互
Swagger是一套围绕Open API规范构建的开源工具,可以帮助设计,构建,记录和使用REST API。
本项目使用了Knife4j,Knife4j对Swagger做了封装
使用方式
-
导入knife4j的maven坐标
-
配置类中加入knife4j的相关配置
-
设置静态资源映射,否则接口文档无法访问
1.4阿里云oss对象存储
在阿里云官网注册登录,之后可以看到oss控制台,在控制台中新建bucket ,一些配置属性,根据自己的需求来。
创建完成后记住这些内容
alioss: endpoint: oss-cn-beijing.aliyuncs.comaccess-key-id: LTAI5t7yJ6N34BBBwSckzdkr access-key-secret: 4NaS1bMCsjWeb4K9XWd6EdZuIyeiC1 bucket-name: skyimagescidag
1.5初识Redis
1.启动 redis-server.exe redis.windows.conf2. 连接 redis-cli.exe -h 127.0.0.1 -p 6379
Redis数据类型
- 字符串(string):普通字符串,Redis中最简单的数据类型 - 哈希(hash):也叫散列,类似于Java中的HashMap结构 - 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList - 集合(set):无序集合,没有重复元素,类似于Java中的HashSet - 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
字符串常用命令
-
SET** key value 设置指定key的值
-
GET key 获取指定key的值
-
SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
-
SETNX key value 只有在 key 不存在时设置 key 的值
哈希操作命令
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:
-
HSET key field value 将哈希表 key 中的字段 field 的值设为 value
-
HGET key field 获取存储在哈希表中指定字段的值
-
HDEL key field 删除存储在哈希表中的指定字段
-
HKEYS key 获取哈希表中所有字段
-
HVALS key 获取哈希表中所有值
列表操作命令
Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:
-
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
-
LRANGE key start stop 获取列表指定范围内的元素
-
RPOP key 移除并获取列表最后一个元素
-
LLEN key 获取列表长度
-
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
集合操作命令
Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:
-
SADD key member1 [member2] 向集合添加一个或多个成员
-
SMEMBERS key 返回集合中的所有成员
-
SCARD key 获取集合的成员数
-
SINTER key1 [key2] 返回给定所有集合的交集
-
SUNION key1 [key2] 返回所有给定集合的并集
-
SREM key member1 [member2] 移除集合中一个或多个成员
有序集合操作命令
Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:
常用命令:
-
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
-
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
-
ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
-
ZREM key member [member ...] 移除有序集合中的一个或多个成员
通用命令
Redis的通用命令是不分数据类型的,都可以使用的命令:
-
KEYS pattern 查找所有符合给定模式( pattern)的 key
-
EXISTS key 检查给定 key 是否存在
-
TYPE key 返回 key 所储存的值的类型
-
DEL key 该命令用于在 key 存在是删除 key
1.6HttpClient
通过java代码来实现发送Http请求
1.6.1使用方法
1. 创建HttpClient对象。 2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。 3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。 4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。 5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 6. 释放连接。无论执行方法是否成功,都必须释放连接
1.6.2案例
public static String doGet(String url,Map<String,String> paramMap){// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault(); String result = "";CloseableHttpResponse response = null; try{URIBuilder builder = new URIBuilder(url);if(paramMap != null){for (String key : paramMap.keySet()) {builder.addParameter(key,paramMap.get(key));}}URI uri = builder.build(); //创建GET请求HttpGet httpGet = new HttpGet(uri); //发送请求response = httpClient.execute(httpGet); //判断响应状态if(response.getStatusLine().getStatusCode() == 200){result = EntityUtils.toString(response.getEntity(),"UTF-8");}}catch (Exception e){e.printStackTrace();}finally {try {response.close();httpClient.close();} catch (IOException e) {e.printStackTrace();}} return result;}
public static String doPost(String url, Map<String, String> paramMap) throws IOException {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = ""; try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url); // 创建参数列表if (paramMap != null) {List<NameValuePair> paramList = new ArrayList();for (Map.Entry<String, String> param : paramMap.entrySet()) {paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);httpPost.setEntity(entity);} httpPost.setConfig(builderRequestConfig()); // 执行http请求response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), "UTF-8");} catch (Exception e) {throw e;} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}} return resultString;}
1.7spring cache
基于注解的缓存功能
@CachePut
/*** CachePut:将方法返回值放入缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@PostMapping@CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1public User save(@RequestBody User user){userMapper.insert(user);return user;}
@Cacheable
/*** Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据, *调用方法并将方法返回值放到缓存中* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@GetMapping@Cacheable(cacheNames = "userCache",key="#id")public User getById(Long id){User user = userMapper.getById(id);return user;}
@CacheEvict
@DeleteMapping@CacheEvict(cacheNames = "userCache",key = "#id")//删除某个key对应的缓存数据public void deleteById(Long id){userMapper.deleteById(id);} @DeleteMapping("/delAll")@CacheEvict(cacheNames = "userCache",allEntries = true)//删除userCache下所有的缓存数据public void deleteAll(){userMapper.deleteAll();}
1.8spring TASK
任务调度,按照约定的时间自动执行某个代码逻辑
cron表达式
6或7个域
秒 分 小时 日 月 周 年
使用Cron - 在线Cron表达式生成器
可以快速开发
使用
1.导入maven坐标
2.启动类添加@EnableScheduling 开启任务调度
3.自定义定时任务类
1.9WebSocket
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。
HTTP协议和WebSocket协议对比:
-
HTTP是短连接
-
WebSocket是长连接
-
HTTP通信是单向的,基于请求响应模式
-
WebSocket支持双向通信
-
HTTP和WebSocket底层都是TCP连接
WebSocket缺点:
服务器长期维护长连接需要一定的成本 各个浏览器支持程度不一 WebSocket 是长连接,受网络限制比较大,需要处理好重连
结论:WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用
WebSocket实现步骤:
1). 直接使用websocket.html页面作为WebSocket客户端
2). 导入WebSocket的maven坐标
3). 导入WebSocket服务端组件WebSocketServer,用于和客户端通信
4). 导入配置类WebSocketConfiguration,注册WebSocket的服务端组件
5). 导入定时任务类WebSocketTask,定时向客户端推送数据
1.10 Apache ECharts
官网Apache ECharts
1.11Apache POI
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。