尚医通简介

尚医通可以网上预约挂号。

核心技术

SpringBoot : 简化新 Spring 应用的初始搭建以及开发过程

SpringCloud : 基于 Springboot 实现的云原生的开发工具,SpringCloud 使用的技术:(Spring Cloud Gateway , Spring Cloud Alibaba Nacos, Spring Cloud Alibaba Sentinel, Spring Cloud Task , Spring Cloud Feign等)

MyBatis-Plus : 持久层框架

Redis : 内存缓存

RabbitMQ : 消息中间件

HTTPClient : http 协议客户端

Swgger2 : Api 接口文档

Nginx :负载均衡

Lombok

Mysql : 关系型数据库

MongoDB : 面向文档的 NoSQL 数据库

Vue.js : web 界面的渐进式框架

Node.js JavaScript 运行环境

Axios : Axios 是一个基于 promise 的 HTTP 库

NPM : 包管理器

Babel : 转码器

Wepack : 打包工具

Docker : 容器技术

Git : 代码管理工具

DockerFile : 管理 Docker 镜像命令文本

Jenkins : 持续集成工具

项目功能

管理员系统

数据管理- 数据字典

医院管理- 医院设置

- 医院列表

会员管理- 会员列表

- 认证审批列表

订单管理 - 订单列表

统计管理 - 预约统计

用户系统

1. 首页数据显示

2. 预约挂号

3. 支付挂号订单

4. 登录

手机号登录

微信登录

MyBatis-Plus

是MyBatis 的增强工具,在Mybatis 的基础上只做增强不做改变,为简化开发,提高效率而生。

MyBatis-Plus 主键生成策略

@TableId(type=IdType.类型)

ASSIGN_ID          19 位

ASSIGN_UUID

AUTO                   自动增长

INPUT

NONE

雪花算法

MyBatis-Plus 修改和自动填充

自动填充

注解: @TableField(fill = FieldFill.INSERT)

@TableField(fill = FieldFill.INSERT_UPDATE)

实现 MetaObjectHandler 的 insertFill 和 updateFill 方法

MyBatis-plus 乐观锁

场景:

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

乐观锁实现方式:

取出记录时,获取当前version

更新时,带上这个version

执行更新时, set version  = newVersion where version = oldVersion

如果version 不对,就更新失败

实现方式

修改实体类

添加 @Version

@Version

private Integer version;

添加乐观锁配置类

加入乐观锁插件

@Bean

public OptimisticLockerInterceptor optimsticLockerInterceptor(){

return new OptimisticLockerInterceptor();

}

MyBatis-plus 查询

简单查询

selectByMap(Map map)

selectBatchIds(Collection collection)

分页查询

配置分页插件

@Bean

public PaginationInterceptor paginationInterceptor(){

return new PaginationInterceptor();

}

编写分页代码

插入Page 对象,传入两个参数

当前页

每页记录数

调用mp 的方法实现分页

Mybatis-plus 删除

根据id 删除记录

批量删除                deleteBatchIds

简单条件删除        deleteByMap

逻辑删除和物理删除

物理删除:真实删除,将对应数据从数据库种删除,之后查询不到此条被删除数据。

逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

逻辑删除

在表添加字段,作为逻辑删除标志,每次删除时候,修改标志位

0 没有删除

1 删除

注解: TableLogic

MyBatis-Plus 条件构造器和常用接口

ge,gt,le,lt,isNull,isNotNull

ne,ne

between, notBetween

like,notlike likeLeft,likeRight

orderBy, orderByDesc, orderByAsc

搭建项目后端环境

common 包

model 包

service 包

maven 中 pom, jar, war 三种打包方式的区别

1、pom是maven依赖文件

  2、jar是java普通项目打包文件

  3、war是javaweb项目打包文件

具体应用

1、pom打包方式可以作为其他项目的maven依赖,构建maven项目时可用在父级工程或者聚合工程中,用来做jar包的版本控制;

  2、jar包通常是开发时需要应用的类,当需要某些功能时就导入相应的jar包,在构建maven时作为子类;

  3、war包用来发布服务,打成war包后部署到服务器访问。

开发医院设置的基本功能

整合swagger2

@Api

@ApiOperation

@ApiParam

统一返回结果 Result

分页查询

参数 @RequestBody(required = false) 加上了之后,不允许使用@GetMapping, 需要修改成@PostMapping  . 效果从原来从单个属性传值变成了方便的json 传值,方便前端。

统一异常处理

自定义异常类

添加全局异常处理类

注解 @ControllerAdvice

@ExceptionHandler(Exception.class)

自定义异常需要手动抛出

日志打印

日志记录器的行为是分等级的

分为: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL

默认情况下,spring boot 从控制台打印出来的日志级别只有 INFO 及以上级别,可以配置日志级别

logging.level.root = WARN

这种方式只能将日志打印到控制台上。

Logback 日志

spring boot 内部使用 Logback 作为日志实现框架

Logback 和 log4j 非常相似,如果你对 log4j 很熟悉,那对 logback 很快就会熟悉

直接配置 Logback-spring.xml 配置文件

ES6

ES6 是一种规范,JavaScripe 是一种具体实现

1. let 声明变量

var  可以声明多次  全局用

let   只能声明一次  定义块中使用

2. const 声明常量

声明之后不允许改变

一旦声明必须初始化,否则会报错

3. 解构赋值

解构赋值是对赋值运算符的扩展

他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值

4. 模板字符串

模板字符串相当于加强版的字符串,用反引号` ,除了作为普通字符串,还可以用来定义多行字符串,还可以在字符串中加入变量和表达式

5. 声明对象简写

6. 对象拓展运算符

拓展运算符(...)用于取出参数对象所有可遍历属性然后拷贝到当前对象。

7. 箭头函数

箭头函数提供了一种更加简洁的函数书写方式,基本语法是:

参数 => 函数体

箭头函数多用于匿名函数的定义

Vue

声明式渲染:

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 地系统。这里地核心思想就是没有繁琐地 DOM 操作,例如 JQuery 中,我们需要先找到 div 节点,获取到 DOM 对象,然后进行一系列的节点操作。

代码片段

快捷自动生成代码片段

新建以 code-snippets 类型的文件, 直接敲出 perfix 属性就可以打印出对应的代码片段

Vue 单向和双向绑定指令

单向绑定

v-bind : 用在标签属性上面,通过指令获取 data 定义变量值

例如: <div v-bind:style="msg">颜色</div>

也可以直接省略 v-bind

例如: <div :style="msg">颜色</div>

双向绑定

v-model

当数据发生变化的时候,视图也会跟着发生变化

数据模型发生了改变,会直接显示在页面上

当视图发生变化的时候,数据也会跟着同步变化

用户在页面上的修改,会自动同步到数据模型中去

Vue 绑定事件

v-on : 事件名称=“调用方法”

例如

<div v-on:click="show()">事件绑定</div>

简写

<div @click="show()">事件绑定</div>

Vue 条件指令

v-if : 条件判断

v-else

Vue 循环指令

v-for

Vue 实例声明周期

created() : 在页面渲染之前执行

mounted() : 在页面渲染之后执行

axios 实例

axios 是独立于 vue 的一个项目,可用于浏览器和 node.js 中发送 ajax 请求

例如:

axios.get("json 文件的路径")

.then(response => {                 // 请求成功

this.userList = response

}).catch(error => {

console.log(error)

})

element-ui

是 饿了吗 前端出品的基于 Vue.js 的后台组件库,方便程序员进行页面快速布局和构建

Node.js

JavaScript 引擎

浏览器的内核包括两部分核心:

DOM 渲染引擎

JavaScript 解析引擎

Chrome 浏览器内置 V8 引擎

什么是 Node.js

脱离浏览器环境也可以运行 JavaScript , 只要有 JavaScript 引擎就可以。

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境: 即 Node.js 内置了 Chrome 的 V8 引擎, 可以在Node.js 环境直接运行  JavaScript 程序

Node.js 作用

1. JavaScript 运行环境

2. 模拟服务端效果

npm 包管理工具

什么是 npm

全称 Node Package Manager , 是 Node.js 包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也是 Node.js 的包管理工具,相当于前端的 Maven.

npm 初始化

npm init -y

修改 npm 镜像

修改成淘宝镜像

npm install

npm install 依赖名称

ES6 模块化

export default {

list(){}

save(){}

}

import user from  '01.js'

user.list();

user.save();

注意: ES6 的模块化无法在 Node.js 中执行,需要用 Babel 编辑成 ES5 后再执行

babel 转码器

安装命令

npm install -g babel-cli

配置

.babelrc

安装转码器

Webpack

什么是 Webpack

Webpack 是一个前端资源加载/打包工具。他将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少页面请求。

安装

npm install -g webpack webpack-cli

搭建前端环境

vue-element-admin

基于 element-ui 的一套后台管理系统继承方案

1. 解压文件到项目工作区

2. 根据 package.json 下载需要依赖     npm install

3. 启动搭建好前端项目         npm run dev

目录改造和登录改造

修改   src/store/modules/user.js

框架开发流程

1. 添加路由

2. 设置跳转页面路径

3. 在 api 文件夹创建 js 文件,定义接口路径

4. 在页面中引入 js 文件,使用 axios 进行接口调用,把接口返回的数据在页面显示

医院设置前端

跨域问题

三个地方,任何一个不相同产生跨域

访问协议 : http   https

访问地址 : 192.128.2.21     172.11.1.1

端口号 : 9528      8201

解决方式:

1. Controller 加上  @CrossOrign

===

代表值和类型都相同

功能点

分页查询

删除

批量删除

锁定与取消锁定

添加医院设置

显示医院设置

更新医院设置

组件重用问题

问题: vue-router 导航切换时,如果两个路由都渲染同个组件,组件的声明周期方法(created 或者 mounted)不会再被调用,组件会被重用,显示上一个路由渲染出来的自建

解决方案:可以简单的在 router-view 上加上一个唯一的key , 来保证路由切换时都会重新触发声明周期方法,确保组件被重新初始化。

数据字典需求

数据字典就是管理系统中常用的分类数据或者一些固定数据。

注解

@TableField(exist=false)

类似与 JPA 里面的 @Transient

EasyExcel

Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl。但是都有严重的消耗内存问题

easyExcel 重写了 poi 对 07 版 Excel 的解析。

easyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。在尽可能地节约内存地情况下支持读写 大于 100 M 地 Excel

添加缓存

Spring Cache + Redis 缓存数据

Spring Cache 是一个非常优秀地缓存组件。自 Spring 3.1 起,提供了类似于 @Transactional 注解事务地注解 Cache 支持,且提供了 Cache 抽象,方便切换各种底层 Cache (Redis)

使用 Spring Cache 的好处

1. 提供基本的 Cache 抽象,方便切换各种底层 Cache .

2. 通过注解 Cache 可以实现类似于事务一样,缓存逻辑透明的应用到我们的业务代码上,且只需要更少的代码就可以完成。

3. 提供事务回滚时也自动回滚缓存

4. 支持比较复杂的逻辑缓存

常用缓存标签

缓存 @Cacheable

根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回,如果缓存不存在,则执行方法,并把返回的结果存入缓存中,一般用在查询方法上。

缓存 @CachePut

使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询缓存库。一般用字新增方法上

缓存 @CacheEvict

使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上。

配置Nginx

由于我们后端有很多服务模块,每个服务模块都有对应的访问路径与端口,为了提供统一的api 接口,所以使用 nginx 作为反向代理服务器。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

MongoDB

MongoDB 是由 C++ 编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 中的基本概念是文档、集合、数据库

spring-data-mongodb 提供了 MongoTemplate 与 MongoRepository 两种方式访问 mongodb, MongoRepository操作简单,MongoTemplate 操作灵活,我们在项目中可以灵活适用这两种操作 Mongodb.

常用操作:

添加操作

查询所有

根据id查询

条件查询

模糊查询

分页查询

修改操作

删除操作

基于MongoTemplate 开发 CRUD

基于MongoRepository 开发 CRUD

上传医院接口

预约挂号平台-----------------------------医院1

-----------------------------医院2

医院1系统---------------------------上传科室接口-----------------------连接到预约挂号平台系统

医院1系统---------------------------上传医院接口-----------------------连接到预约挂号平台系统

医院1系统---------------------------上传排班接口-----------------------连接到预约挂号平台系统

图片 base64 说明

图片的 base64 编码就是可以将一张图片数据编码成一串字符串,使用该字符串代替图像地址 url

在前端页面中常见的 base64 图片的引用方式:

<img src="data:image/png;base64,IVSDEwo>

1. 优点

(1). base64 格式的图片是文本格式,占用内存小,转换后的比例大概为三分之一,降低了服务器的资源消耗;

(2). 网页中使用base64 格式的图片,不用再请求服务器调用图片资源,减少了服务器访问次数。

传输过程中,“+ ”转成了空格,需要手动转回来

注册中心与服务调用

目前再医院列表中需要医院的信息和等级信息,而两段信息属于不同的模块,service-cmn 和 service-hosp , 所以我们需要远程调用。

常见的注册中心

1. Eureka , Zookeeper, Consul , Nacos

相对于Spring Cloud Eureka 来说, Nacos 更强大。

Nacos = Spring Could Eureka + Spring Cloud Config

医院列表管理

医院排班管理

服务网关

API 网关出现的原因是微服务架构的出现,不同微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信。会存在问题

Spring Cloud Gateway

是 Spring 官方基于 Spring 5.0 \ Spring Boot 2.0 和 Project  Reactor 等技术开发的网关 ,Spring Cloud Gateway ,旨在为微服务架构提供简单的,有效的,和统一的 API 路由管理方式。

NUXT

服务端渲染技术

token

完成登录

生成字符串,包含用户信息(比如用户名)

lucy#192.168.1.1#...

header 请求头

有效时间 30 分钟

每个请求操作,如果登录判断

在请求头,查看是否包含 token 字符串,如果包含,对字符串校验,是否生成toaken

登录状态

JWT

token 生成工具

用户认证与网关整合

OAuth2

1. 开放系统间授权问题

2. 单点登录问题

尚硅谷 尚医通学习笔记相关推荐

  1. Vue数据代理+事件处理+事件修饰符的作用+计算属性的使用,尚硅谷Vue系列教程学习笔记(2)

    尚硅谷Vue系列教程学习笔记(2) 参考课程:<尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通> 参考链接:https://www.bilibili.com/video/ ...

  2. 【尚硅谷/周阳】JUC学习笔记

    JUC学习笔记[尚硅谷/周阳] 本文章基于B站视频教程[juc 与 jvm 并发编程 Java 必学_阳哥- 尚硅谷]进行整理记录,仅用于个人学习,交流使用. 目录标题 JUC学习笔记[尚硅谷/周阳] ...

  3. 尚硅谷Spring注解开发学习笔记

    文章目录 前言 1.课程安排 1.1.容器 1.2.扩展原理 1.3.Web 2.配置文件开发 2.1.导入Spring-context依赖包 2.2.编写Spring配置文件 2.3.编写Perso ...

  4. 尚硅谷 SpringCloud 第二季学习笔记【已完结】

    SpringCloud 一.介绍 (一)cloud和boot之间的依赖关系 https://spring.io/projects/spring-cloud#overview Finchley 是基于 ...

  5. SpringBoot练手项目《尚硅谷智慧校园》学习笔记

    ​ 一 项目展示 1 登录及角色控制 ​ 2首页展示 3 业务模块展示 二 智慧校园系统简介 2.1 项目简介 智慧校园管理系统:主要是以年级.班级为单位,进行老师和学生信息记录和统计功能.项目采用前 ...

  6. 尚硅谷springboot 2核心技术学习笔记

    开发前先查看系统Java和maven的版本 参考资料 1.尚硅谷/SpringBoot2核心技术与响应式编程 2.springboot官网 3.版本升级变化 maven环境配置 <mirrors ...

  7. 尚硅谷的后台管理系统学习笔记【尚硅谷】【Vue】

    day1 1.什么是后台管理系统项目? 注意:前端领域当中,开发后台管理系统项目,并非是java.php等后台语言项目. 在前面课程当中,我们已经开发了一个项目[尚品汇电商平台项目],这个项目主要针对 ...

  8. 尚硅谷 周阳老师 SpringCloud 学习笔记

    十二.服务配置 Spring Cloud Config 配置中心 1. 概述 1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会 ...

  9. Vue尚硅谷张天禹学习笔记

    001_课程简介 1.课程内容 002_Vue简介 1.vue是什么 2.vue是谁开发的 3.vue的特点 3.1可以通过声明式编码提高开发效率 js中的页面渲染是以如下这种方式实现的 每次都会把最 ...

最新文章

  1. 易生信-扩增子教程02-真菌引物选择
  2. [转载]中国工商银行软件开发部门职业发展
  3. Linux MySQL Connector/C++ 编程实例
  4. springboot nacos配置中心_SpringBoot开发案例之Nacos配置管理中心
  5. 五、资本资产定价模型 CAPM
  6. python中yield的用法
  7. PHP + Redis 实现一个简单的twitter
  8. react打包后图片丢失_手搭一个 React,Typescript,Koa,GraphQL 环境
  9. CentOS HarBor安装与配置
  10. goland环境配置_Goland辅助工具goimports和gomodules
  11. go语言 mysql卡死_一次mysql死锁的排查过程-Go语言中文社区
  12. 在SPA应用中利用JWT进行身份验证
  13. mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
  14. Redis笔记(七)Java实现Redis消息队列
  15. 小型英语字典(字典训练)
  16. Scratch 游戏项目学习法 —— 接苹果(六)让苹果掉到下面
  17. HearthBuddy卡牌无法识别
  18. OpenWRT - Makefile:31: *** missing separator. Stop.
  19. 微软:区块链BaaS平台将成为重要盈…
  20. 2022年裁员潮,失业程序员何去何从?

热门文章

  1. AI修图!pix2pix网络介绍与tensorflow实现
  2. 网络对时设备(NTP校时)如何守护安全日志
  3. C:\Windows\system32>net start MySQL 发生系统错误 1058。 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
  4. 国内外PaaS案例解析、赛道、趋势
  5. MFC关于*.rc和resource.h文件的巧妙运用
  6. c语言是学电脑吗,c语言入门至精通这些天一直有人问我,c语言好学吗?我是个新手...
  7. 大数据Java基础一
  8. 【Solr】之使用结巴分词模拟搜索商品1
  9. 作业成本法中的成本动因分析----by AMT 邓为民
  10. Html设置表格撑开,CSS教程:表格不被撑开的解决办法