视频链接:https://www.bilibili.com/video/BV1V5411K7rT?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P10
Java微服务 + 分布式 +全栈项目
文章目录
1.尚医通介绍
1.1 简介
尚医通即为网上预约挂号系统,网上预约挂号是近年来开展的一项便民就医服务,旨在缓解看病难、挂号难的就医难题,许多患者为看一次病要跑很多次医院,最终还不一定能保证看得上医生。网上预约挂号全面提供的预约挂号业务从根本上解决了这一就医难题。随时随地轻松挂号!不用排长队!.
1.2 核心技术
后端技术:
- SpringBoot:简化新Spring应用的初始搭建以及开发过程,
- SpringCloud :基于Spring Boot实现的云原生应用开发工具,SpringCloud使用的技术:(SpringCloudGateway、Spring Cloud Alibaba Nacos、Spring Cloud Alibaba Sentinel、SpringCloud Task 和 SpringCloudFeign.等),
- MyBatis-Plus:持久层框架
- Redis:内存缓存
- RabbitMQ:消息中间件
- HTTPClient: Http协议客户端
- Swagger2 : Api接口文档工具
- Nginx:负载均衡
- Lombok
- Mysql:关系型数据库
- MongoDB∶面向文档的NoSQL数据库
前端技术:
- Vue.js:web界面的渐进式框架
- Node.js:JavaScript运行环境
- Axios:Axios是—个基于promise的HTTP库
- NPM:包管理器
- Babel:转码器·
- Webpack:打包工具
其它技术:
- Docker:容器技术
- Git:代码管理工具
- DockerFile:管理Docker镜像命令文本
- Jenkins:持续集成工具
1.3 业务流程
管理员系统:
数据管理
医院管理
会员管理
订单管理
统计管理
用户系统:
首页数据显示
预约挂号
支付挂号订单
登录
手机号登录
微信登录
1.4 服务架构
2.MyBatis-Plus入门
2.1 简介
MyBatis-Plus(简称MP)是一个MyBatis,的增强工具,在 MyBatis, 的基础上只做增强不做改变,为简化开发、提高效率而生。
MP入门步骤:
-
创建数据库,创建数据库表
-
创建工程 springboot
-
在项目引入mp和相关依赖
-
配置数据库信息
-
编写核心代码
-
测试
查看sql输出日志:放在application.properties里面
2.2 添加和主键策略
主键策略:
MyBatis-Plus默认的主键策略是:ASSIGN_ID(使用了雪花算法)
雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
2.3 修改和自动填充
修改:
自动填充:
-
准备工作:
在表添加两个字段【添加datetime类型的新的字段create_time、update_time】
在表对应实体类添加对应属性:
-
在实体类要进行自动填充属性添加注解
-
创建类实现接口,实现接口两个方法,一个方法添加执行,一个方法修改执行,设置添加什么值
2.4 乐观锁
解决丢失更新问题
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
接下来介绍如何在 Mybatis-Plus项目中,使用乐观锁
- 在表添加字段作为版本号,在表对应实体类添加版本号属性
- 在实体类进行版本号操作属性上面添加注解
- 配置乐观锁插件【在单独的配置文件中】
- 测试
2.5 简单查询
2.5.1 通过多个id批量查询
2.5.2 简单的条件查询
通过map封装查询条件
注意: map中的key对应数据库中的列名。如︰数据库user_id,实体类是userld,这时map的key需要填写user_id
2.5.3 分页查询
MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能
- 添加分页插件
配置类中添加@Bean配置
- 测试selectPage分页
先插件Page对象,传入两个参数【当前页、每页记录数】;然后调用mp的方法实现分页
测试∶最终通过page对象获取相关数据
2.6 删除
2.6.1 根据id删除记录
2.6.2 批量删除
2.6.3 简单条件删除
2.6.4 逻辑删除
物理删除∶真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除︰假删除,将对应数据中代表是否被删除字段状态修改为"被删除状态”,之后在数据库中仍旧能看到此条数据记录;
逻辑删除
在表添加字段,作为逻辑删除标志,每次删除时候,修改标志位
0 没有删除
1 删除
逻辑删除的使用场景∶
1.可以进行数据恢复
2.有关联数据,不便删除
逻辑删除具体步骤:
-
数据库修改:添加deleted字段
表添加字段,对应实体 类添加属性,作为逻辑删除标志
-
在实体类逻辑删除属性添加注解
-
添加自动填充
) -
测试
测试后发现,数据并没有被删除,deleted字段的值由0变成了1
测试后分析打印的sql.语句,是一条update
注意∶被删除前,数据的deleted字段的值必须是0,才能被选取出来执行逻辑删除的操作;
2.7 条件查询
Wrapper介绍:
Wrapper:条件构造抽象类,最顶端父类
AbstractWrapper:用于查询条件封装,生成sql的where条件
QueryWrapper:查询条件封装
UpdateWrapper:Update条件封装·
AbstractLambdaWrapper:使用Lambda语法
LambdaQueryWrapper:用于Lambda语法使用的查询Wrapper
- ge【大于等于】、gt【大于】、le【小于等于】、lt【小于】
- eq【等于】、ne【不等于】
- between【在…区间之间】、notBetween【不在…区间之间】
- like【模糊查询】、notLike【不在模糊查询】、likeLeft【百分号在左】、likeRight【百分号在右】
- orderBy【排序】、orderByDesc【降序排列】、orderByAsc【升序排列】