TOC
KINA

KINA-0

Start having fun with KINA right now!

Spring综合项目:Hyplus Foodie餐饮平台

SpringBoot + SSM项目《神威食客》(Hyplus Foodie

GitHub仓库:Hyplus-Foodie

1 项目整体介绍

软件开发流程:

  1. 需求分析:需求规格说明书、产品原型
  2. 设计:UI设计、数据库设计、接口设计
  3. 编码:项目代码、单元测试
  4. 测试:测试用例、测试报告
  5. 上线运维:软件环境安装、配置

角色分工:

  • 项目经理:对整个项目负责,任务分配、把控进度
  • 产品经理:进行需求调研,输出需求调研文档、产品原型等
  • UI设计师:根据产品原型输出界面效果图
  • 架构师:项目整体架构设计、技术选型等
  • 开发工程师:代码实现
  • 测试工程师:编写测试用例,输出测试报告
  • 运维工程师:软件环境搭建、项目上线

软件环境:

  • 开发环境(Development):开发人员在开发阶段使用的环境,一般外部用户无法访问
  • 测试环境(Testing):专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问
  • 生产环境(Production):即线上环境,正式提供对外服务的环境

2 后端环境搭建

各类对象:

  • POJO:普通Java对象,只有属性和对应的getter和setter
  • Entity:实体,通常和数据库中的表对应
  • DTO:数据传输对象,通常用于程序中各层之间传递数据
  • VO:视图对象,为前端展示数据提供的对象

更多细节详见仓库源码


3 功能测试

功能测试方式:

  • 通过接口文档测试
  • 通过前后端联调测试

注意:由于开发阶段前端和后端是并行开发的,后端完成某个功能后,此时前端对应的功能可能还没有开发完成,
导致无法进行前后端联调测试。所以在开发阶段,后端测试主要以接口文档测试为去。


4 Spring Data Redis

Redis简介与Spring Data Redis基本教程


5 HttpClient

HttpClient是Apache Jakarta Common下的子项目,提供了高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且支持HTTP协议的最新版本和建议。

核心API:

  • HttpClient
  • HttpClients
  • CloseableHttpClient
  • HttpGet
  • HttpPost

发送请求步骤:

  1. 创建HttpClient对象
  2. 创建Http请求对象(HttpGet或HttpPost)
  3. 调用HttpClient的execute()方法发送请求

使用例:

@SpringBootTest
public class HttpClientTest {

    /**
     * 通过HttpClient发送Get请求
     */
    @Test
    public void testGet() throws IOException {
        // 创建HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建HttpGet对象
        HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");

        // 发送请求,接收响应结果
        CloseableHttpResponse response = httpClient.execute(httpGet);

        // 解析返回结果
        // 获取服务端返回的状态码
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务端返回的状态码为:" + statusCode);
        // 获取服务端返回的内容
        HttpEntity entity = response.getEntity();
        String body = EntityUtils.toString(entity);
        System.out.println("服务端返回的内容为:" + body);

        // 关闭资源
        response.close();
        httpClient.close();
    }

    /**
     * 通过HttpClient发送Post请求
     */
    @Test
    public void testPost() throws Exception {
        // 创建HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建HttpPost对象
        HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
        // 设置请求体
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username", "admin");
        jsonObject.put("password", "123456");
        StringEntity entity = new StringEntity(jsonObject.toString());
        // 指定请求编码方式
        entity.setContentEncoding("utf-8");
        // 指定请求数据类型
        entity.setContentType("application/json");
        httpPost.setEntity(entity);

        // 发送请求,接收响应结果
        CloseableHttpResponse response = httpClient.execute(httpPost);

        // 解析返回结果
        // 获取服务端返回的状态码
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务端返回的状态码为:" + statusCode);
        // 获取服务端返回的内容
        HttpEntity entity1 = response.getEntity();
        String body = EntityUtils.toString(entity1);
        System.out.println("服务端返回的内容为:" + body);

        // 关闭资源
        response.close();
        httpClient.close();
    }
}

6 微信小程序开发

小程序:一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

微信开发者工具:下载链接

安装并创建项目后注意取消勾选详情 - 本地设置 - 不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书

6.1 小程序目录结构

小程序包含一个描述整体程序的app和多个描述各自页面的page。一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:

  • app.js:小程序逻辑,必需
  • app.json:小程序公共配置,必须
  • app.wxss:小程序公共样式表,非必须

一个小程序页面由四个文件组成,各种文件类型的作用如下:

  1. js:页面逻辑,必需
  2. wxml:页面结构,必须
  3. json:页面配置,非必须
  4. wxss:页面样式表,非必须

6.2 微信登录

官方文档:小程序登录


7 Spring Cache

Spring Cache实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis

常用注解:

  1. @EnableCaching:开启缓存注解功能,通常加在启动类
  2. @Cacheable:在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中。相关属性如下:
    • cacheNames:缓存名称,用于划分不同的缓存区(例如userCache:: + key值)
    • key:缓存key值,格式为Spring EL表达式,从方法参数获取值(与形参名保持一致,例如#id#user.id等)
  3. @CachePut:将方法的返回值放到缓存中。相关属性类似@Cacheable
  4. @CacheEvict:将一条或多条数据从缓存中删除。相关属性相比@Cacheable新增如下几条:
    • allEntries:为true则删除该区域内所有的缓存。
    • beforeInvocation:设为true时在执行方法之前做删除缓存处理;设为false时在执行方法之后做删除处理。默认为false。

8 微信支付

详见产品中心

JSAPI下单:商户系统调用该接口在微信支付服务后台生成预支付交易单

微信小程序支付时序图:

微信支付时序图


9 校验收货地址是否超出配送范围

百度地图开放平台:https://lbsyun.baidu.com/

进入控制台,创建应用,获取AK

相关接口:


10 Spring Task

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

应用场景:

  • 信用卡每月还款提醒
  • 银行贷款每月还款提醒
  • 火车票售票系统处理未支付订单
  • 入职纪念日为用户发送通知吃

cron表达式:本质上是一个字符串,可以定义任务触发的时间,建议通过cron表达式在线生成器编写。

基本构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义——秒 分钟 小时 日 月 周 [年](其中“年”可选),日或周几不确定可填?

【例】2022年10月12日上午9点整对应的cron表达式为0 0 9 12 10 ? 2022

Spring Task使用步骤:

  1. 导入maven坐标spring-context
  2. 启动类添加注解@EnableScheduling开启任务调度
  3. 自定义定时任务类,在方法(无返回)上添加注解@Scheduled并设置cron参数

发表评论