大型医疗挂号微服务“马上好医”医疗项目(4)设计一个医院方接口

news/2024/9/20 11:33:24/ 标签: 后端, java, spring boot

如何构建一个医院方接口

一、如何进行数据库建模

数据库建模一般需要使用工具PowerDesign,但是其实在navicat中是有类似的功能的

二、分析医院接口会有什么字段

其实很多的同学在入行的时候会有一个问题,没有设计思维。

表字段的设计方案

  • 状态字段
    • 启用/禁用
    • 逻辑删除
  • 并发的乐观锁字段
    • 状态字段
  • 说明字段(备注)
  • 冗余字段
    • 当我们的查询需要多张表进行联合查询的时候,并且某些表只用到了1-2个字段(后续的时候添加的)
  • 关联字段
    • 关联到某些表的时候,逻辑外键的关联
  • 必备的业务字段
    • 按需进行设计
  • 约束设计(其他的设计方式)
    • 非空
    • 长度(合理的长度节省空间,并且我们可以校验数据的有效性)
    • 合理的索引(散列度,散列度比较低的字段,不建议建立索引,也不建议做为条件查询)
      • 列的不同值/列的总行数 电话号码 500W/500W = 1 散列度越趋近1 那么散列度越高 散列度趋近0,散列度越低
  • 溯源字段(创建人,创建时间,修改时间)
    • 创建人 账号的唯一标识
    • 创建时间 记录第一次创建这条记录的时间
    • 修改时间 最后一次修改的时间

三、根据需求确定项目字段

3.1 需求:预约平台需要跟医院内部的his交换签名,但是往往只需要单方面验签。

image.png

hospital_information

医院编号:平台分配,全局唯一 主键索引 id

医院名称 hospname

接口相关的调用密钥Key hospkey

api的基础调用路径 api_url

联系人 contacts

联系人的手机号 contacts_phone

状态字段(启用或者删除) is_disable

创建人 creater

创建时间 create_time

更新时间 update_time

逻辑删除字段 is_delete

image.png

四、编写接口

逆向工程 ------------------- 省略

1.mybatis-plus的条件构造器

编写接口之前,我们需要认识一下我们的mybatis-plus的条件构造器(Wrapper)

2.、AbstractWrapper

QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为

2.1、eq、allEq、ne、

eq:等于,参数一个条件

allEq:全等于,参数是一个map集合,可以一次匹配多个条件,

ne:不等于

2.2、gt、ge、lt、le

gt:大于,

ge:大于等于,

lt:小于,

le:小于等于

2.3、between、notBetween

between:在值1和值2之间,

notBetween:不在值1和值2之间

2.4、like、notLike、likeLeft、likeRight

like:’%值%’,

notLike:’%值%’,

likeLeft:’%值’,

likeRight:‘值%’

2.5、isNull、isNotNull

isNull:字段 IS NULL

isNotNull:字段 IS NOT NULL

2.6、in、notIn

in:字段 IN (v0, v1, …),

notIn:字段 NOT IN (value.get(0), value.get(1), …)

2.7、inSql、notInSql

inSql:字段 IN ( sql语句 ),

notInSql:字段 NOT IN ( sql语句 )

2.8、or、and

or:拼接 OR,

and 嵌套

注意事项:
主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and
2.9、exists、notExists

exists:拼接 EXISTS ( sql语句 ),

notExists:拼接 NOT EXISTS ( sql语句 )

2.10、orderBy、orderByAsc、orderByDesc

orderBy:指定是否排序,升序还是降序

orderByAsc:排序:ORDER BY 字段, … ASC,

orderByDesc:排序:ORDER BY 字段, … DESC

3.QueryWrapper

说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取

4、UpdateWrapper

说明:继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!

5. LambdaQueryWrapper

利用lambda表达式的一个用法(类::静态方法)获得属性对应自带你们,可防止写错字段名

6. LambdaUpdateWrapper

利用lambda表达式的一个用法(类::静态方法)获得属性对应自带你们,可防止写错字段名

跨域问题:

一、为什么会跨域

说到跨域不得不谈的就是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存在还是在于安全。所谓的“同源策略”,最早是由 Netscape公司提出的一个安全策略,后来这就成为了浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。

举例:举例来说,http://www.mashibing.com/index.html,这个网址,http是协议,www.mashibing.com是域名,80是端口号(80端口号默认可以省略)。

二、什么是源

Web内容的源由用于访问它的URL 的方案(协议),主机(域名)和端口定义。只有当方案,主机和端口都匹配时,两个对象具有相同的起源。

同源不同源一句话就可以判断:就是url中 scheme host port 都相同即为同源

三、同源不同源举例

同源策略的具体规则如下表所示:

举例:

image.png

四、浏览器为什么需要同源策略

同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

五、常规前端请求跨域

在没有前后端分离的时候,跨域问题往往是很少的。因为前后端都部署到一起。现在前后端分离不管vue /react 面临跨域请求的问题。

1.

2.利用JSONP

  • 底层利用script实现,发送请求的传递callback的参数;
  • 服务端可以到这个参数,给这个参数加上一个()然后直接返回给浏览器;
  • 浏览器接收到返回的内容后就会解析成一个js的函数调用,前提先要定义这个函数。

也就是说 其实也是利用

JSONP安全性问题:

1.脚本注入攻击

2.恶意域名—跨站脚本攻击

3.数据泄漏

后端解决的方式

  • @CrossOrigin:在响应头中添加一个地址;
  • 在SpringMVC的配置文件中进行配置。
<mvc:cors><mvc:mapping path="/**" allowed-origins="*"allowed-methods="POST, GET, OPTIONS, DELETE, PUT,PATCH"allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"allow-credentials="true"/>
</mvc:cors>

网关解决跨域问题的方式


http://www.ppmy.cn/news/1460778.html

相关文章

el-select选项框内容过长

利用popper-class实现选项框内容过长&#xff0c;截取显示功能&#xff1a; <el-select popper-class"popper-class" :popper-append-to-body"false" v-model"value" placeholder"请选择"><el-optionv-for"item in opt…

【HCIP学习】BGP对等体组、聚合、路由反射器、联盟、团体属性

一、大规模BGP网络所遇到的问题 BGP对等体众多&#xff0c;配置繁琐&#xff0c;维护管理难度大 BGP路由表庞大&#xff0c;对设备性能提出挑战 IBGP全连接&#xff0c;应用和管理BGP难度增加&#xff0c;邻居数量过多 路由变化频繁&#xff0c;导致路由更新频繁 二、解决大…

【八股系列】React中props和state的区别是什么?

React中props和state的区别是&#xff1a; props是用来从父组件向子组件进行传递数据的&#xff0c;在子组件中可以用props来接收到父组件传递过来的参数。props是不可变的&#xff0c;用户不能在子组件中修改props的值&#xff0c;因为从父组件中传递过来的值被认为是不可变数…

机器学习算法应用——朴素贝叶斯分类器

朴素贝叶斯分类器 朴素贝叶斯分类器&#xff08;Naive Bayes Classifier&#xff09;是一种基于贝叶斯定理和特征条件独立假设的分类方法。它适用于分类任务&#xff0c;特别是文本分类、垃圾邮件识别等领域。 原理 朴素贝叶斯分类器基于以下两个主要假设&#xff1a; 特征条…

区块链的可扩展性三难问题

这个词是由以太坊的联合创始人Vitalik Buterin创造的&#xff0c;并提出了理想的区块链需要具备的三个特征&#xff1a;去中心化、可扩展性和安全性。 Vitalik还提出&#xff0c;区块链几乎不可能很好地实现所有这三个特征&#xff0c;所以会出现权衡。 因此&#xff0c;今天…

研究生通用学术英语写作(刘美岩)教材电子版分享

研究生通用学术英语写作电子版资源分享 本着开源的思想&#xff0c;为了实现互通有无&#xff0c;诸位需要研究生通用学术英语写作电子版资源的朋友可以直接微信关注下面公众号&#xff0c;或者手动搜索莲花百货铺&#xff0c;在公众号中直接输入书名就可获得网盘链接&#xff…

容器化Jenkins远程发布java应用(方式二:自定义镜像仓库远程拉取构建)

1.创建maven项目 2.配置git、maven 3.阿里控制台>容器镜像服务>镜像仓库>创建镜像仓库 4.执行shell脚本&#xff08;推送镜像到阿里云镜像仓库&#xff09; 使用到登录阿里云仓库命令 #!/bin/bash # 服务名称 SERVER_NAMEplanetflix-app # 镜像tag IMAGE_TAG1.0.0-SN…

【 npm详解:从入门到精通】

文章目录 npm详解&#xff1a;从入门到精通1. [npm](https://www.npmjs.com/)的安装2. npm的基础用法2.1 初始化项目2.2 安装依赖2.3 卸载依赖2.4 更新依赖 3. npm的高级用法3.1 运行脚本3.2 使用npm scope3.3 使用npm link 4. npm资源5. 使用npm进行依赖树分析和可视化6. npm进…

Flask应用的部署和使用,以照片分割为例。

任务是本地上传一张照片&#xff0c;在服务器端处理后&#xff0c;下载到本地。 服务器端已经封装好了相关的程序通过以下语句调用 from amg_test import main from test import test main() test() 首先要在虚拟环境中安装flask pip install Flask 文件组织架构 your_pro…

python将两张图片对齐

目录 需要对齐的照片如下&#xff1a; 源码&#xff1a; 结果&#xff1a; 需要对齐的照片如下&#xff1a; 源码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as plt# 读取两张图片 imgA cv2.imread(./out/out/3.png) imgB cv2.imread(./…

安卓手机APP开发__支持不同的像素深度

安卓手机APP开发__支持不同的像素深度 目录 概述 使用对深度独立的像素 把DP单位转换成像素单位 概述 安卓设备不仅有不同的大小,还有不同的像素深度.一个设备可能在每一英寸上有 160个像素,另一个设备在相同的尺度上有480个像素.如果你不考虑这些不同, 系统可能会缩放你的…

系统网络基础知识介绍

1.路由 路由是指从原地址到目的地时&#xff0c;决定端到端路径的网络范围的进程&#xff0c;是工程术语。路由工作在OSI参考模型的第三层&#xff08;网络层&#xff09;&#xff0c;是数据包转发设备。12 路由是把数据从一个网络转发到另一个网络的过程&#xff0c;这个…

【Gitlab远程访问本地仓库】Gitlab如何安装配置并结合内网穿透实现远程访问本地仓库进行管理

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会&#xff0c;重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨&#xff1a;国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…

【软考网络工程师】每日练题学知识

1.在EIGRP协议中&#xff0c;某个路由器收到了两条路径到达目标网络&#xff0c;路径1的带宽为100Mbps&#xff0c;延迟2ms&#xff0c;路径2的带宽为50Mbps&#xff0c;迟为4ms&#xff0c;如果EIGRP使用带宽和延迟的综合度量标准&#xff0c;那么该路由器选择的最佳路径是&am…

YzmCMS 7.0任意函数调用RCE 漏洞研究分析

YzmCMS是一款基于YZMPHP开发的一套轻量级开源内容管理系统,YzmCMS简洁、安全、开源、免费,可运行在Linux、Windows、MacOSX、Solaris等各种平台上,专注为公司企业、个人站长快速建站提供解决方案。 YzmCMS 某些接口调用了 db_pdo类的where方法 导致了远程命令执行漏洞&#xf…

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…

设计模式——装饰者模式(Decorator)

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰者模式相比生成子类更为灵活。在装饰者模式中&#xff0c;一个装饰类会包装一个对象&#xff08…

LeetCode 每日一题 ---- 【2960.统计已测试设备】

LeetCode 每日一题 ---- 【2960.统计已测试设备】 2960.统计已测试设备方法&#xff1a;模拟数组 2960.统计已测试设备 方法&#xff1a;模拟数组 简单的模拟题&#xff0c;遍历数组&#xff0c;暴力的话就是两次遍历第一次从 0 到 n - 1&#xff0c;判断 batteryPercentages…

【刷题】一篇文章搞定“位运算”

只要春天不死&#xff0c;就有迎春的花朵年年岁岁开放&#xff0c;生命讲涅槃&#xff0c;生生不息&#xff0c;并会以另一种形式永存。 – 路遥 《平凡的世界》 (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥ (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥…