09、利用代码生成器快速实现火车基础数据的维护

9-1 本章介绍 (02:23)

9-2 更换远程代码仓库 (05:06)

查看:
git remote -v

删除:
git remote remove origin

9-3 项目中增加admin控台模块 (13:45)

增加新的vue cli模块,两种做法1 使用已保存的模板,用vue create创建2 直接复制现有的web,然后npm install,这样可以保持和web使用同个版本的依赖

如果在js里import一个属性,但在下面的代码又没用到,就会报如下错:
no-unused-vars是eslint其中一个规则
解决方法:一种是去掉import,另一种是在package.json里关闭这个no-unused-vars规则

9-4 项目中增加business业务模块 (08:12)

增加business模块,所有关于车次的维护、卖票功能都会放在这个模块里

创建后端模块的步骤:
创建maven模块
修改pom.xml,增加springboot相关依赖
增加启动类
增加测试接口
增加配置:端口、日志等,修改日志文件输出路径
修改gateway,增加新模块路由

@ComponentScan不能写得太通用,比如只写了个“com”,这样会把第三方的类也扫描到,会有问题

引入mybatis依赖后,必须配置上数据源,数据库不存在也不要紧,否则启动会出错

9-5 为business模块配置持久层生成器 (08:51)

有的微服务项目,项目之间共用一个数据库,有利于开发,会员和车票表可做关联,有利于数据库运维
有的微服务项目,项目之间用不同的数据库,有利于按需分配资源,且能做好隔离,就算抢票太多,把business搞挂了,也不会影响用户登录,使用其它功能

生产发布时,不同模块的库要放在不同的RDS里,否则就浪费了分库的隔离性了

9-6 快速生成车站基础数据 (14:59)

生成器使用:
准备一张表,写好sql
执行进数据库
修改mybatis生成器配置文件
生成持久层
生成前后端代码
修改菜单
修改路由

管理控台的请求:/admin/xxx,这样方便针对/admin做拦截或放行
给第三方调用:/api/xxx,方便针对/api做验签等操作

9-7 快速生成火车基础数据管理功能 (19:03)

火车类型是相对比较固定的,不会变化的,可以做成枚举,如果是经常变的,可以做成数据库来维护

票价=里程*单价,不同类型的车,单价不一样,高铁就比动车贵,同时单价不固定不变的,是阶梯单价,比如100公里内是0.4元/公里,100公里到500公里是0.3元每公里

9-8 快速生成火车车站基础数据管理功能 (08:00)

两表关联,如果有唯一键,用唯一键关联,没有再考虑用ID关联

是否加冗余字段,看使用场景是查多还是写多,查多就可以考虑加冗余,12306就是典型的查多

正常的项目开发,很少完全遵守数据库三大范式

我们在保存数据时,应该先查是否已存在,而不能认为反正有唯一键,不用查了,直接插入。唯一键是最后一道屏障,保证数据准备性。

9-9 快速生成火车车厢基础数据管理功能 (04:57)

9-10 快速生成火车座位基础数据管理功能 (11:08)

column是mysql关键字,用关键字作列号,在正常使用mybatis时是没问题,mybatis会自动为关键字增加反引号``,但是在使用分布式事务seata时会有问题,所以微服务项目还是避免用关键字

9-11 使用pinyin-pro将汉字转成拼音 (10:38)

在正式项目中,maven或nodejs依赖第三方组件时,用最新版不一定是最好的,应该用稳定的,被验证过的版本

npm install pinyin-pro@3.13.0

首页:https://pinyin-pro.cn/
github:https://github.com/zh-lx/pinyin-pro

vue3的watch,可以用来监听某个变量值的变化
watch和computed类似,都可以用来影响属性值,可以这样来区分:
watch:监听一个属性值的变化,从而对多个其它的属性值进行修改(一个变值改多个)
computed:一个值的结果,由多个其它的属性值的变化而修改(多个变值改一个)

9-12 车次表单增加车站下拉选择 (15:54)

功能实现:将火车数据变成下拉选择,将主表的数据变成下拉框,给子表界面选择。这是常见的主从界面的设计

代码提交的时候,勾选【Amend Commit】,可以和上一次提交合并,注意:只有未push的提交可以这样做

9-13 制作车次下拉框组件(一) (16:21)

当一个功能在很多页面都要被用到时,可以考虑做成组件

通过学习本节的内容,可以脱离antdv,用原生html组件写一套自己的组件库

props用于定义父子组件参数传递
emits用于定义父子组件事件传递

组件化的两个好处:

1.容易使用
2.容易统一修改

9-14 制作车次下拉框组件(二) (09:58)

9-15 制作车站下拉框组件 (12:45)

本节的内容就是按照车次下拉框组件的写法,制作一个车站下拉框组件,就是Ctrl+C Ctrl+V

程序员平时在项目中,不能停留在Ctrl+C Ctrl+V,不能一个经验用三年,项目中没有机会学习,就自己创建机会来学习,所以大家才会来学习这门课程,为你们点赞!

9-16 为基础数据增加车次查询条件 (19:42)

9-17 实现按车次生成车座功能(一) (14:42)

批量生成的功能一定要考虑几个问题:能不能支持重复生成?是否要加事务?(中间失败了是全部退出,还是插入多少是多少)
重复生成的两种做法:1. 存在就跳过;2. 先删除已有再插入
对于复杂的功能,可以像课程一样,拆分成一步步

9-18 实现按车次生成车座功能(二) (14:13)

9-19 完善车次&车厢&座位管理功能 (23:51)

修复警告:[Vue warn]: setup() return property “_width” should not start with “$” or “_” which are reserved prefixes for Vue internals.
官方文档:https://cn.vuejs.org/guide/essentials/reactivity-fundamentals.html#declaring-reactive-state
Vue 在组件实例上暴露的内置 API 使用 $ 作为前缀。它同时也为内部属性保留 _ 前缀。因此,你应该避免在顶层 data 上使用任何以这些字符作前缀的属性。

编程规范:内部变量(局部变量)使用_开头

要判断train.id是否有值,可以使用!!train.id避免直接使用train.id,可能会有警告。
即:避免使用if(xxx),应该用if(!!xxx)

9-20 为车次&车厢&车站增加存在性校验 (26:23)

js对日期的操作使用dayjs,在引入antdv时,就会自动引入dayjs,antdv的日期控件,都日期的操作也是用dayjs


09、利用代码生成器快速实现火车基础数据的维护
http://yuanql.top/2023/07/07/00_项目经历/YuanqlProject/Springboot3+微服务实战12306高性能售票系统/09、利用代码生成器快速实现火车基础数据的维护/
作者
Qingli Yuan
发布于
2023年7月7日
许可协议