实战分布式医疗挂号系统之设置微服务搭建医院模块

 更新时间:2022年04月24日 15:41:13   作者:Hudie.  
这篇文章主要为大家介绍了实战分布式医疗挂号系统之搭建医院设置微服务模块,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Java技术迷

文章导读

本系列文章介绍从0开始搭建一个基于分布式的医疗挂号系统。本次四篇文章完成了医院设置微服务模块的后端接口,为了方便开发,对接口的返回结果、全局异常、全局日志进行了统一处理。 同时,为了方便进行访问测试,还整合了Swagger2工具,这些通用的模块中,除了全局日志被放在医院设置微服务模块的配置资源中,其余都统一被抽取在common模块中。具体实现可参考下面文章:

医院设置微服务 | 接口开发

通用模块 | 整合Swagger2

通用模块 | 统一返回结果、统一异常处理、统一日志处理

项目已开源至  https://github.com/Guoqianliang/yygh_parent

一、项目模块划分图

本系列文章开始介绍从0开始搭建一个《基于分布式的医疗挂号系统》,下图是初步模块划分图,可根据此图在IDEA中创建出项目初步结构。其中父工程是一个Spring工程,父模块是Maven工程,注意两者都需要使用pom方式进行打包。

初步模块划分图

二、开发前的准备工作

1.医院设置数据库表设计

在《基于分布式的医疗预约挂号系统》中,医院设置表yygh_hosp主要是用来保存每个医院的一些基本信息,每个医院的信息就是一条记录。这条记录中保存了医院编号、接口调用相关的签名等等。

只有开通了医院设置,才可以进行医院记录的上传。所以,在医院设置模块部分,我们所开发的功能就是基于单表的一个CRUD、发送签名信息等基本功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建数据库: yygh_hosp
CREATE DATABASE IF NOT EXISTS `yygh_hosp` CHARACTER SET utf8mb4;
USE `yygh_hosp`;
# 创建表:hospital_set
CREATE TABLE `hospital_set` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `hosname` VARCHAR(100) DEFAULT NULL COMMENT '医院名称',
  `hoscode` VARCHAR(30) DEFAULT NULL COMMENT '医院编号',
  `api_url` VARCHAR(100) DEFAULT NULL COMMENT 'api基础路径',
  `sign_key` VARCHAR(50) DEFAULT NULL COMMENT '签名秘钥',
  `contacts_name` VARCHAR(20) DEFAULT NULL COMMENT '联系人',
  `contacts_phone` VARCHAR(11) DEFAULT NULL COMMENT '联系人手机',
  `status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '状态',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '逻辑删除(1:已删除,0:未删除)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hoscode` (`hoscode`) COMMENT '唯一约束(医院编号必须唯一)'
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='医院设置表';

创建好后的数据库表如下:

医院信息表

2.搭建医院设置微服务模块

在servie父模块中创建service_hosp模块,为service_hosp模块添加如下配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 服务端口
server.port=8201
# 服务名
spring.application.name=service-hosp
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://[ip地址]:3306/yygh_hosp?characterEncoding=utf-8&useSSL=false
spring.datasource.username=[数据库名称]
spring.datasource.password=[数据库密码]
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

并为此微服务模块创建启动类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.gql.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @Description: 启动类
 * @author Guoqianliang
 * @date 20:17 - 2021/4/3
 */
@SpringBootApplication
public class ServiceHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceHospApplication.class, args);
    }
}

在测试前,将service模块中下图所示的三个依赖注释掉,这些现在还用不到。若不注释,启动时项目会报错。

需要被注释的依赖

运行此微服务,发现项目成功启动:

微服务启动成功


至此,医院设置数据库表,以及医院微服务模块搭建成功,后续就可以在此基础上进行接口的编写了。

三、医院设置微服务模块开发

步骤1:生成表对应的实体类

此处在编写实体类时使用了一个父子类来做映射,这样做是为了将公用的字段给抽取出来。

在继承中,子类继承父类就拥有了父类的全部非私有属性。

与yygh_hosp数据库表对应的实体类

步骤2:创建Mapper

MyBatis-Plus在Mapper层为我们提供了一个BaseMapper<T>接口,继承这个接口,即可获得CRUD功能。

Mapper层

mapper一般对应一个xml配置文件,下面对xml的开发规范进行补充:

mapper接口的地址通过.xml中的namespace属性引入。mapper接口中方法名和.xml中id一致。mapper接口中方法输入参数类型和.xml中statement的parameterType指定的类型一致。mapper接口中方法返回值类型和.xml中statement的resultType指定的类型一致。

由于Mapperapper是一个接口,接口动态生成实现类的对象默认是找不到的,需要添加MapperScan才能找到动态生成的对象。可以将MapperScan写在启动类上,也可以如下所示编写一个配置类进行统一管理。

1
2
3
4
5
6
7
8
9
10
11
12
package com.gql.yygh.hosp.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
/**
 * @Description: 医院配置
 * @author Guoqianliang
 * @date 9:42 - 2021/4/4
 */
@Configuration
@MapperScan("com.gql.yygh.hosp.mapper")
public class HospConfig {
}

步骤3:创建Service

MyBatis-Plus在Service层为我们提供了一个IService接口和一个ServiceImpl实现类,我们的Service接口继承IService接口、我们的实现类继承ServiceImpl实现类。就可以让MyBatis-Plus在Service层帮我们去调用Mapper,直接使用封装号的baseMapper就能完成调用。

Service层

步骤4:创建Controller

创建Controller,在其中装配Service即可,后续在Controller中调用Service层的方法,进而调用数据库即可实现功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @Description: Controller
 * @author Guoqianliang
 * @date 0:16 - 2021/4/4
 */
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
    /**
     * 注入Service
     */
    @Autowired
    private HospitalSetService hospitalSetService;
}

四、测试开发环境

为了验证环境的正确性,下面对微服务整体进行测试,我们在Controller中编写一个查询数据库所有信息的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @Description: Controller
 * @author Guoqianliang
 * @date 0:16 - 2021/4/4
 */
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
    /**
     * 注入Service
     */
    @Autowired
    private HospitalSetService hospitalSetService;
}

手动在yygh_hosp数据库hospital_set表中添加一条记录:

添加一条记录进行测试

将微服务跑起来,在浏览器访问url:http://localhost:8201/admin/hosp/hospitalSet/findAll,

成功获取到json格式的信息:

成功获取json信息

至此,医院设置微服务模块就搭建成功了,接下来就可以在此环境上进行接口的开发,更多关于分布式医疗挂号系统搭建资料请关注脚本之家其它相关文章!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://guoqianliang.blog.csdn.net/article/details/115419552

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • Spring Boot中RedisTemplate的使用示例详解

    Spring Boot中RedisTemplate的使用示例详解

    RedisTemplate.opsForHash()是RedisTemplate类提供的用于操作Hash类型的方法,它可以用于对Redis中的Hash数据结构进行各种操作,如设置字段值、获取字段值、删除字段值等,本文介绍Spring Boot中RedisTemplate的使用,感兴趣的朋友一起看看吧
    2023-10-10
  • SpringBoot整合MyBatisPlus配置动态数据源的方法

    SpringBoot整合MyBatisPlus配置动态数据源的方法

    这篇文章主要介绍了SpringBoot整合MyBatisPlus配置动态数据源的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • POS机如何与Java交互的方式探讨

    POS机如何与Java交互的方式探讨

    本文深入探讨POS机与Java语言的交互机制,详细介绍了通过RESTfulAPI、Socket编程和消息队列等方式实现数据交换和功能调用,文章还包含了代码示例、状态图与关系图,帮助开发者理解和实现POS机与Java之间的高效交互
    2024-09-09
  • Java开发中的OOM内存溢出问题详解

    Java开发中的OOM内存溢出问题详解

    这篇文章主要介绍了Java开发中的OOM内存溢出问题详解,OOM,全称 Out Of Memory,意思是内存耗尽或内存溢出,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个 error,需要的朋友可以参考下
    2023-08-08
  • JAVA模拟新增顺序表及单链表

    JAVA模拟新增顺序表及单链表

    这篇文章主要介绍了JAVA模拟新增顺序表及单链表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • java自定义JDBC实现连接池

    java自定义JDBC实现连接池

    本文主要介绍了java自定义JDBC实现连接池,包含实现JDBC连接池以及SQLException 异常的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • 如何解决TCP socket的阻塞问题

    如何解决TCP socket的阻塞问题

    这篇文章主要介绍了如何解决TCP socket的阻塞问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Tomcat集群和Session复制应用介绍

    Tomcat集群和Session复制应用介绍

    本文将详细介绍Tomcat集群和Session复制应用,需要了解的朋友可以参考下
    2012-11-11
  • Mybatis中${param}与#{param}的区别说明

    Mybatis中${param}与#{param}的区别说明

    这篇文章主要介绍了Mybatis中${param}与#{param}的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Spring Bean的线程安全问题

    Spring Bean的线程安全问题

    Spring容器中的Bean是否线程安全,本文主要介绍了Spring Bean的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论