慕课 - SpringBoot+Vue3打造ERP+CRM一体化SaaS系统
# 介绍和基础
# 标题的这几个缩写是什么
CRM => 增加销售额
ERP => 降低成本
# 设计方案
前端
- npm: node包管理
- vue-cli: 脚手架工具, 生成框架
- vue-router: 前端路由工具
- vuex: 状态管理工具, 管理数据交互和重用
- element-ui: 前端 UI 组件
- axios: 网络请求库
- 等
后端
- Spring Boot
- Spring Security + Jwt
- MyBatis: 持久层
- Redis: 缓存
- Mysql: 数据库
- oshi
数据库
- master 库: 主数据库, 在结构上保持稳定
- master_tenant 表
- log 表
- tenant 库: 每个tenant 生成一个(应该指订阅这个系统的用户)
- system 表
- crm 表 1+
- erp 表 1+
SaaS 系统
- 注册 + 初始化
- 独立数据库
- 数据源切换
# 流程化搭建开发环境
# Java
# node.js+npm
# vue, vue-cli
然后
|
|
两个都装好后 vue –version 验证
# postman
建议安装: postman 用于调试 API
# mysql
下载 mysql installer for WIN: MySQL :: MySQL Community Downloads
安装 MySQL server, 点击加到右边的项可以自定义安装地址. 示范项目用的是5.7.21
选 server computer
验证: mysql -u root -p
# Redis
配置环境变量
# maven
maven 是一个插件框架
maven-source-plugin
maven-compiler-plugin, 用来编译源码, 通常只用设置版本
spring-boot-maven-plugin, springboot打包 jar 包
资源配置
maven-surefire-plugin, 单元测试
IntelliJ 项目设置里 show members 可以看到类的成员, ctrl+e 最近文件, settings-file encoding 全部改 utf-8
IntelliJ 插件
- grep console, 配置日志颜色
- GsonFormatPlus, 方便处理 gson
- jadx 反编译
- alibaba java coding, guidelines, 代码规范
- codeglance, 右侧代码预览缩略图
- MyBatisX, mapper 和 xml 之间跳转
- MyBatisCodeHelperPro, 协助生成 dml 语句
# 数据库设计开发
# 理论
# 数据库设计步骤
- 需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计: 选择最合适的数据结构
- 数据库实施
- 运行和维护
# 为属性创建索引
- B+ 树索引: 如果属性经常出现在搜索条件中, 或聚合函数中(max, min), 考虑为属性创建 B+ 索引
- hash 索引: 属性经常出现在等值连接
- 聚簇 索引: 为了提高某个属性组的查询速度, 把具有相同值的条目
# 开发
# PowerDesigner
PowerDesigner 安装+汉化+破解+使用过程 - 沦陷 - 博客园 也许是原版: PowerDesigner安装教程(含下载+汉化+破解) - 付杰博客
# COMMON
# 介绍
4-1、下载代码,并进行启动,注册租户,并登录
4-2、父子工程是什么意思?思考如果自己搭建,基本流程和注意事项是什么!
4-3、spi机制原理是什么?
4-4、@ConfigurationProperties注解核心原理是什么,如何应用?
4-5、请阐述一下常量的命名规则!
4-6、@InitBinder注解的作用是什么?思考如何更有效的应用
4-7、Entity的作用是什么?
4-8、自己梳理一下注册和登录的流程
4-9、cod、data、message来存放什么信息?
4-10、邻接表的优缺点是什么?
4-11、请手动梳理TableSupport的逻辑流程
4-12、手动梳理RedisCache的重点逻辑
4-13、什么是字符集?思考字符集和字符编码的区别
4-14、Converter接口怎么定义的?
4-15、不看源码,自己手动编写字符串格式方法
4-16、如何比较两个枚举成员定义的顺序?
4-17、自己手动梳理全局异常定义的方法步骤
# 示例启动
# 启动 redis
在 redis 目录, cmd, redis-server
如果没有字符图形也就是失败了, 就运行
|
|
# 第一次时: 数据库初始化
|
|
运行 sql 目录的数据库脚本, 注意先选择对应的库. 出现中文乱码, cmd 里先跑 chcp 65001 再进 mysql
ryt_nelub7xr -> 测试租户 tenant4 -> admin root1234 ryt_5rbg03bq -> 主数据库管理的业务数据库 super admin
# 后端启动
# 前端启动
前端项目是 erp-crm-ui, 需要 npm, vue 相关环境
启动: IJ 打开项目, npm run dev build: IJ 打开项目, npm run build:prod
然后自动打开浏览器
# 父子工程创建
如果 pom.xml 被忽略
# SprintBoot
# SprintBoot 简介
2-直接集成到 tomcat 等
# maven 项目改造为 SpringBoot 项目
就是在父工程的 xml 文件里添加 SpringBoot 相关的依赖
- 其中 type 行意指 pom 文件会指明依赖的 jar 包
- scope import 配合 type pom, 打破单继承. SprintBoot 官方的使用推荐是继承 父pom, 但如果有其他 父pom 又要使用 SprintBoot, 就可以以这种方式打破
还要引入
关注这两个类:
- scanBase 指定根目录
- exclude 在多数据源的时候排除, 以手动指定数据源
application.yml 是主配置文件
4-5
使 devtools 配置和热加载用同一个加载器
# 配置
# 怎么读取项目配置
- common 模块
- ConfigurationProperties 注意前缀
- ErpCrmConfig 类的变量名要和 application.yml 中的属性并保持一致
# 常量
- 项目名小写
- 包名小写
- 类名大写开头驼峰
- 方法名小写开头驼峰
- 常量大写
项目中的常量定义在 common.constant
# initBinder
由 @initBinder
修饰的方法用于初始化 WebDataBinder
对象
用 request @RequestParam
或 @PathVariable
修饰的方法获取参数后, 如果参数类型不匹配, WebDataBinder 可以处理
例如前台传来的日期字符串转换为 Date 类型
# BaseController
这是作为控制类的基类
关于防 sql 注入
|
|