【鱼皮-用户中心】笔记

article/2025/6/25 0:55:24

任务:完整了解做项目的思路,接触一些企业及的开发技术

title

    • 企业做项目流程
      • 需求分析
      • 技术选型
    • 计划一
      • 一、前端初始化
        • 1. **下载node.js**
        • 2. **安装yarn**
        • 3. **初始化 Ant Design Pro 脚⼿架(关于更多可进入官网了解)**
        • 4. **开启Umi UI插件(可帮助我们快速开发完整的界面)**
        • 5. **项目瘦身**
      • 二、后端初始化
        • 1. **初始化MySQL**
        • 2. **三种方式创建 SpringBoot 项目的方式:**
        • 3. **这里使用在 IDEA 中创建 SpringBoot 项目**
        • 4. **导入Junit**
        • 5. **引入 MyBatis-Plus**
    • notes
      • 一个项目所需要的依赖
      • 用户表字段
    • 计划二
      • 后端-注册功能
        • 1.规整项目目录
        • 2. 实现基本数据库操作
        • 3. 完成注册业务层代码
    • notes
  • 多环境开发

企业做项目流程

  • 需求分析 => 设计(概要设计、详细设计)=> 技术选型 => 初始化 / 引用需要的技术 => 写Demo => 写代码(实现业务逻辑) => 测试(单元测试)=> 代码提交 => 部署发布

需求分析

  1. 登陆、注册
  2. 用户管理(仅管理员可见)
  3. 用户校验(仅星球用户)

技术选型

前端:三件套 + React + 组件库Ant Design + Umi + Ant Design Pro (现成的管理系统)
后端: java + spring + springmvc + mybatis + mybatis-plus + springboot + mysql
部署: 服务器 容器

  1. 学会前后端企业主流开发技术的应用
  2. 了解做项目的完整流程,能够独立开发及上线项目
  3. 学到系统设计的方法和经验
  4. 学到一些实际的编码技巧,比如开发工具、快捷键、插件的使用
  5. 学到代码的优化技巧,比如抽象、封装、提高系统性能、节约资源的方法
  6. 学习登录态、代理、多环境、容器、跨域等重要的开发知识
  7. 学到一些源码阅读的技巧
  8. 提升自主解决问题的能力

计划一

一、前端初始化

1. 下载node.js
  • 官网下载:https://nodejs.org/en/
  • 最好使用大于等于14的版本,12版本有点老
  • 安装后进行换源
npm config get registry  #get命令查看registry
npm config set registry http://registry.npm.taobao.org   #用set换为阿里镜像
2. 安装yarn
  1. 尽量不使用npm命令安装,推荐使用msi安装包安装,下载地址:msi安装包
  2. 安装 yarn 后需要检查环境配置和安装路径是否相同,否则会报错,找不到该命令
  3. 通过 yarn -v 验证安装是否成功
  4. 安装好后还需要进⾏最后⼀步:改变镜像 运行下面的命令即可
yarn config set registry https://registry.npm.taobao.org -g
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass-g
3. 初始化 Ant Design Pro 脚⼿架(关于更多可进入官网了解)

Ant design pro 官网

  1. 创建项目目录,在该目录下打开 cmd ,运行以下命令:(由于 Ant Design Pro 更新 旧版命令可能会有错误,要根据官网初始化步骤进行初始化)
  • 提供 create umi 来快速的初始化脚手架 ANT DESIGN PRO
npm i @ant-design/pro-cli -g
pro create myapp
  1. 选择 umi 的版本 一定要选择umi@3

  2. 选择选择简单的(Simple)脚手架

  3. 使用 WebStorm 打开项目

  4. 执行左下角提示的 npm install/在终端运行 yarn

  5. 依赖下载完成之后即可运行

4. 开启Umi UI插件(可帮助我们快速开发完整的界面)
1. 安装 Umi UI,控制台运行下面的命令:
```bash
yarn add @umijs/preset-ui -D #在项目文件夹中运行!
#或
npm install --save-dev @umijs/preset-ui
```
- Umi UI 区块无法预览解决方式:在 hosts 里加 151.101.64.133 raw.githubusercontent.com
- 这个 ip 指向的是美国,其实也不影响功能
5. 项目瘦身
1. 移除国际化- package.json 已经定义好了移除国际化的命令:
`"i18n-remove": "pro i18n-remove --locale=zh-CN --write"`
- 运行该脚本- 删除 src 下的 locales 文件夹2. 删除无用的文件- 如果删除后无法运行,全局搜索查看哪里引用了该文件,删除该引用即可

二、后端初始化

1. 初始化MySQL
  1. 老师使用的是MySQL5.7版本,但是其他的版本已经不兼容,于是我是用的是
    mysql8.0 + springboot3x
  2. 验证 MySQL是否安装成功 - 使用 IDEA 连接
2. 三种方式创建 SpringBoot 项目的方式:
  1. 在 GitHub 拉取现成的模板:SpringBoot-Templates(不建议从零开始写一个项目或在企业中做项目的情况下使用)
  2. SpringBoot 官方的模板生成器
  3. 直接在 IDEA 开发工具中生成 ⭐

注意:在这里的pom.xml导入中有一个大坑❗

为了和mysql 8.0 java17 版本匹对,所以需要引入 springboot3.0 版本,但是启动会发生报错,原因是mapper接口和其他问题,最后检查过后发现是版本问题。

  • 一般来说的导入:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 但是应该是:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.6</version>
</dependency>
3. 这里使用在 IDEA 中创建 SpringBoot 项目
  1. new => project => Spring Initializr => 填写项目的相关信息(本项目使用 Java8 版本)

  2. 勾选 Dependencies

4. 导入Junit
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
5. 引入 MyBatis-Plus
  1. 导入依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version>
</dependency>
  1. 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹
@SpringBootApplication
@MapperScan("com.mark.usercenter.mapper")
public class UserCenterApplication {public static void main(String[] args) {SpringApplication.run(UserCenterApplication.class, args);}
}
  1. 创建数据库
DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  1. 配置数据源
spring:application:name: user-centerdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/universeusername: rootpassword: 123456
  1. model 包下创建实体类User.java
@Data
public class User {private Long id;private String name;private Integer age;private String email;
}
  1. 编写 Mapper 包下的 UserMapper接口
public interface UserMapper extends BaseMapper<User> {}
  1. 测试 MyBatis-Plus 导入成功:
@SpringBootTest
//这里使用的@Test注解与SpirngBoot并无联系,因此此处需要加RunWith注解
@RunWith(SpringRunner.class)
public class SampleTest {@Resourceprivate UserMapper userMapper;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));//调用Mapper方法,查询条件为空,即查询所有List<User> userList = userMapper.selectList(null);//断言——预期结果 对比5与查询结果是否相同Assert.assertEquals(5, userList.size());//输出userList.forEach(System.out::println);}	

notes

一个项目所需要的依赖

在这里插入图片描述

  • .prettierrc.js 美化代码工具
项目解释
Lombok默认
Spring Boot DevTools改代码自动重启
Spring Configuration Processor自动获取get set函数
MySQL Driver驱动
Spring Web增加外部访问能力
MyBatis Framework数据访问层理框架

后端技术介绍:

  • spring : 依赖注入框架,帮助管理java对象,集成一些其他内容

  • springmvc : web框架,提供接口访问、restful接口等能力

  • mybatis : java操作数据库的框架,持久层框架

  • mybatis-plus : 对mybatis增强,一个为简化开发的数据库工具

  • springboot : 不用自己管理spring配置,不用整合框架,快速启动

  • junit : 单元测试库

  • 对于要引入java的包,可以去maven中心仓库查找 (http://mvnrepository.com/)点我跳转

用户表字段

id 主键 bigint
username 昵称 varchar
userAccount 登录账号 varchar
avatarUrl 头像 varchar
gender 性别 tinyint
userPassword 密码 varchar
phone 电话 varchar
email 邮箱 varchar
userStatus 用户状态 int 0表示正常
userRole 用户角色 int 0 -> 普通用户 1 -> 管理员


createTime 创建时间(数据插入时间) datetime
updateTime 更新时间(数据更新时间) datetime
isDelete 是否删除(逻辑删除) tinyint

创建表
使用 IDEA 傻瓜式生成数据表

updateTime 和 createTime 需要手动指定,生成并手动修改的 DDL 如下


-- auto-generated definition
create table user
(id           bigint auto_increment comment '主键id'primary key,username     varchar(256)                       null comment '用户昵称',userAccount  varchar(256)                       null comment '登录账号',avatarUrl    varchar(1024)                      null comment '用户头像',gender       tinyint                            null comment '性别',userPassword varchar(512)                       not null comment '密码',phone        varchar(128)                       null comment '电话',email        varchar(512)                       null comment '邮箱',userStatus   int      default 0                 not null comment '用户状态 0 - 正常',createTime   datetime default CURRENT_TIMESTAMP null comment '创建时间',updateTime   datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',isDelete     tinyint  default 0                 not null comment '是否删除'
)comment '用户';

计划二

后端-注册功能

1.规整项目目录
  • 项目的请求层,业务层
    在这里插入图片描述
  • 静态文件和页面模板文件
    在这里插入图片描述
  • 整体后端框架
    在这里插入图片描述
2. 实现基本数据库操作

1)模型 user 对象 => 和数据库的字段关联
如果mysql实体类过多,那么就需要自动生成

  • 使用 MyBatisX 插件自动生成 domain 实体对象、mapper (操作数据库对象) 、mapper.xml (定义了mapper对象和数据库关联,可以在里面自己写 SQL )、service(包含常用的增删改查)、serviceImpl( service 实现类)
  • 右键表 => MyBatisX-Generator => Next => 勾选 MyBatis-Plus3 => 勾选 Comment(注释)、Actual Column(每一个列的实际列名)、 Model(生成 domain ) 、 Lombok(使用 Lombok 注解) => 勾选 mybatis-plus3 => Finish

在这里插入图片描述

  • 这里就是自动生成的 generator 文件
    数据库实体
操作数据库对象
接口和实现类

  • 一键生成对象所有set方法
    在这里插入图片描述

  • 生成所有的set方法并且赋予默认值
    在这里插入图片描述

3. 完成注册业务层代码

一、注册逻辑

  1. 用户子啊前端输入账户和密码,遗迹校验码(todo)
  2. 校验用户的账号、密码、校验密码是否符合要求
    • 账号不小于4位
    • 密码不小于8位
    • 其他的校验 账户不能重复
    • 账户不包含特殊字符
    • 密码和校验密码相同
  3. 对密码进行加密 (密码千万不要直接存储到数据库中)
  4. 向数据库插入用户数据

由于一个一个校验是非常麻烦的,所以需要引入一个java库
在这里插入图片描述
注册功能 | 后端 - 接口逻辑开发 5.44

  • QueryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("userAccount",userAccount);long count = this.count(queryWrapper);if(count > 0){return -1;}

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

⭕创建了一个查询包装器对象,用于构建查询条件
表示这个查询是针对User实体类的

queryWrapper.eq("userAccount",userAccount);

⭕设置查询条件:查询userAccount字段等于给定userAccount值的记录
eq()方法表示"equals",即等于条件

  • 检验账户名特殊字符的正则表达式
	public static String romveSpecialChar(String str) {String regEx = "\\pP|\\pS|\\s+";str = Pattern.compile(regEx).matcher(str).replaceAll("").trim();return str;}

notes

  1. Mybatis_plus 下划线自动转换成驼峰

多环境开发

同一套项目代码在不同的阶段需要根据实际情况调节配置并部署到不同的机器上

为什么需要?

每个环节互不影响
为了区分不同的阶段:开发、测试、生产
对项目进行优化
本地日志级别
精简依赖(节省项目体积)
项目的环境/参数可以调整,比如JVM参数
针对不同环境做不同的事情。

多环境分类:

本地开发(自己的电脑):localhost(127.0.0.1)
开发环境(远程开发):大家连同一台机器,为了大家开发方便
测试环境(测试):开发/测试/产品人员使用,单元测试/性能测试/功能测试/系统集成测试,独立的数据库、独立的服务器
沙箱环境(实验环境):完全隔离的环境,为了做实验,测试某个功能
预发布环境(类似内测/体验服):基本和正式环境一致,使用正式数据库,更严谨、查出更多问题
正式环境(线上、公开对外访问的项目):尽量不要改动,保证上线前的代码是“完美”运行的


待更新


http://www.hkcw.cn/article/DfljwTuZxK.shtml

相关文章

基于 Chrome 浏览器扩展的Chroma简易图形化界面

简介 ChromaDB Manager 是基于 Chrome 浏览器扩展的一款 ChromaDB&#xff08;一个流行的向量数据库&#xff09;的数据查询工具。提供了一个用户友好的界面&#xff0c;可以直接从浏览器连接到本地 ChromaDB 实例、查看集合信息和分片数据。本工具特别适合开发人员快速查看和…

[ElasticSearch] ElasticSearch的初识与基本操作

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

Kafka 如何保证不重复消费

在消息队列的使用场景中&#xff0c;避免消息重复消费是保障数据准确性和业务逻辑正确性的关键。对于 Kafka 而言&#xff0c;保证不重复消费并非单一机制就能实现&#xff0c;而是需要从生产者、消费者以及业务层等多个维度协同配合。接下来&#xff0c;我们将结合图文详细解析…

【快速解决】数据库快速导出成sql文件

1、cmd直接打开 输入命令 mysqldump -u用户名 -p密码 数据库名 > 导出文件名.sql修改成自己mysql的用户名和密码&#xff0c;和要导出的数据库名称&#xff0c;给导出的文件起一个名字。 如图所示 这样就成功了。

OldRoll复古胶片相机:穿越时光,定格经典

在数字摄影盛行的今天&#xff0c;复古胶片相机的独特魅力依然吸引着无数摄影爱好者。OldRoll复古胶片相机这款软件&#xff0c;以其独特的复古风格和丰富的胶片滤镜效果&#xff0c;让用户仿佛穿越回了那个胶片摄影的黄金时代。它不仅模拟了胶片相机的操作界面&#xff0c;还提…

利用Dify创建一个公司产品知识问答

1、创建知识库 打开dify&#xff0c;创建知识库。 选择创建一个空知识库&#xff0c;对知识库进行命名&#xff0c;或者直接导入已有文本&#xff0c;拖曳或选择文件进入下一步&#xff0c;会自动命名知识库。 创新空知识库后&#xff0c;点击添加文件&#xff0c;再导入已有文…

redis核心知识点

Redis是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、Hash(哈希)、 Lis…

黄金价格查询接口如何用C#进行调用?

一、什么是黄金价格查询接口&#xff1f; 提供当日实时黄金行情数据&#xff0c;如上交所&#xff0c;银行账户黄金&#xff0c;国际金价、金店价格等&#xff0c;获取最低价、最高价、卖价、昨日收盘价、开盘价、涨跌值、最新价格、时间、买价、涨跌幅等行情。 二、科技赋能…

JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口

一、JVM 堆内存&#xff1a;对象的生存与消亡之地 作为 Java 虚拟机中最大的内存区域&#xff0c;堆内存是所有对象实例的 “出生地” 与 “安息所”。从程序运行的角度看&#xff0c;所有通过new关键字创建的对象都在堆中分配内存&#xff0c;其生命周期完全由垃圾回收机制&am…

每日Prompt:隐形人

提示词 黑色棒球帽&#xff0c;白色抹胸、粉色低腰短裙、白色襪子&#xff0c;黑色鞋子&#xff0c;粉紅色背包&#xff0c;衣服悬浮在空中呈现动态姿势&#xff0c;虚幻引擎渲染风格&#xff0c;高清晰游戏CG质感&#xff0c;户外山林背景&#xff0c;画面聚焦在漂浮的衣服上…

Ubuntu22.04通过命令行安装qt5

环境&#xff1a; VMware17Pro ubuntu-22.04.5-desktop-amd64.iso 步骤&#xff1a; 安装好虚拟机进入shell&#xff0c;或通过ssh登录&#xff0c;确保虚拟机能上外网&#xff0c;执行命令&#xff1a; sudo apt update sudo apt install build-essential sudo snap in…

【Java基础05】面向对象01

文章目录 1. 设计对象并使用1.1 类与对象1.2 封装1.2.1 private关键字1.2.2 this关键字成员变量和局部变量的区别 1.2.3 构造方法1.2.4 标准JavaBean类 1.3 对象内存图 本文部分参考这篇博客 1. 设计对象并使用 1.1 类与对象 public class 类名{1、成员变量(代表属性,一般是名…

C58-字符串拼接函数strcat

一 C语言 strcat 函数简明总结 功能 将 src 字符串拼接到 dest 字符串末尾&#xff08;覆盖 dest 的 \0&#xff0c;并在新末尾补 \0&#xff09;。 原型 char *strcat(char *dest, const char *src);要点 目标空间必须足够大&#xff0c;否则导致缓冲区溢出&#xff08;未…

G25-05-31Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Pake: 利用 Rust 轻松构建轻量级多端桌面应用 创建周期:491 天开发语言:Rust协议类型:MIT LicenseStar数量:2095…

火语言UI组件--JSON

【组件功能】&#xff1a;格式化显示json数据。 样式预览 设置 基础设置 属性名称属性释义输入值类型主题样式(theme)设置主题样式(默认 / 暗黑)字符串类型&#xff0c;可选值&#xff08;dark / light &#xff09; 样式设置 属性名称属性释义输入值类型字体大小(fontSize…

Redis 持久化机制详解:RDB 与 AOF 的原理、优缺点与最佳实践

目录 前言1. Redis 持久化机制概述2. RDB 持久化机制详解2.1 RDB 的工作原理2.2 RDB 的优点2.3 RDB 的缺点 3. AOF 持久化机制详解3.1 AOF 的工作原理3.2 AOF 的优点3.3 AOF 的缺点 4. RDB 与 AOF 的对比分析5. 持久化机制的组合使用与最佳实践6. 结语 前言 Redis 作为一款高性…

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个接口&#xff0c;用于创建一系列相关或依赖的对象&#xff0c;无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建&#xff0c;相比工厂方法模式&#xff0c;能创建一个产品族。该模…

建造者模式:优雅构建复杂对象

引言 在软件开发中&#xff0c;有时我们需要创建一个由多个部分组成的复杂对象&#xff0c;这些部分可能有不同的变体或配置。如果直接在一个构造函数中设置所有参数&#xff0c;代码会变得难以阅读和维护。当对象构建过程复杂&#xff0c;且需要多个步骤时&#xff0c;我们可…

JWT 原理与设计上的缺陷及利用

JWT 原理与设计上的缺陷及利用 基本概念 JSON Web Token (JWT)是一个开放标准 ( RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全传输信息。此信息可以验证和信任&#xff0c;因为它是数字签名的。JWT可以使用密钥&…

Jmeter requests

1.Jemter元件和组件 1.1 元件和组件的概念 元件&#xff1a;多个功能相似的的组件的容器&#xff0c;类似于一个工具箱。 组件&#xff1a;实现某个特定功能的实例&#xff0c;类似于工具箱中的螺丝刀&#xff0c;十字扳手... 1.2 作用域和执行顺序 1.2.1 作用域 例子&#…